sed를 사용하여 컬러 출력을 유지하는 방법


10

sed명령을 사용하고 있으며 이전 명령의 컬러 출력을 유지하고 싶습니다. 의 출력 ls은 컬러로 표시되지만 sed의 출력은 컬러가 아닙니다. OSX를 사용하고 있습니다.

ls -la | sed -En  '/Desktop/q;p'

답변:


13

macOS에서은 lsGNU ls가 아니며 --color=alwaysLinux 사용자가이 기능에 대해 기대할 수 있는 옵션을 허용하지 않습니다 .

의 맥 OS 버전에서는 ls, 색에 의해 제어되는 두 변수 : $CLICOLOR$CLICOLOR_FORCE. 전자가 정의되고 지정된 터미널이 $TERM색상 을 지원하고 출력이 터미널 인 경우이 --color=auto옵션 은 GNU의 옵션 과 매우 유사하게 색상이 지정됩니다 . 후자의 변수도 정의되면, 최종 조건은 삭제되고 GNU의 것처럼 작동 --color=always합니다.

색상을에 전달 sed하려면 다음과 같은 것이 필요합니다.

CLICOLOR_FORCE=1 ls -la | sed -En '/Desktop/q;p'

macOS ls에는 -G색상을 활성화 하는 옵션도 있지만 파이프 라인에서 어떻게 작동하는지 잘 모르겠습니다.
8bittree

2
@ 8bittree Passing -G은 다음과 같이 정의하는 것과 같으 $CLICOLOR므로 충분하지 않습니다
Fox

6

맹목적으로 많은 배포판에에 대한 별칭이 있다고 생각 ls합니다 ls --color=auto. ls -la --color=always | sed …작동해야합니다.

(이 auto설정은 광범위하게 말해서 ls출력이 디스플레이로 전달되는지 여부와 디스플레이 색상 만 검사합니다. 그 이유는 색상이 이스케이프 시퀀스, 즉 보이지 않는 명령 문자로 구현되어 프로그램이 혼동 될 수 있기 때문입니다. 파일 이름의 일부에 대해서는


3
맹인 추측이 틀렸다. OSX는 Linux 배포판이 아니며 GNU 사용자 영역을 사용하지 않습니다
Fox
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.