sed를 사용하여 꼬리 출력 색칠하기

sed를 사용하여 꼬리 출력 색칠하기

tailwith 의 출력 색상을 어떻게 지정합니까 sed?

echo "`tput setaf 1`foo`tput op`"예상대로 작동

echo "foo" | sed -e 's/(foo)/`tput setaf 1`\0`tput op`/g'그러나 그렇지 않습니다.

내가 여기서 무엇을 놓치고 있는 걸까요?

답변1

반드시 그럴까요 sed?

echo "foo bar baz" | grep --color=auto "bar"

위 내용은 bar기본적으로 빨간색으로 강조표시됩니다. 매뉴얼 페이지에는 환경 변수와 함께 사용할 색상을 선택할 수 있다고 나와 있습니다 GREP_COLORS.

모든 줄을 인쇄하고 강조 표시하려면 다음을 수행하십시오 bar.

echo "foo bar baz" | grep -E --color=auto "^|bar"

답변2

echo 명령의 백틱 ``은 프로세스를 생성하고 해당 출력을 echo 명령줄로 바꿉니다. 예를 들어 다음을 사용하여 이를 볼 수 있습니다.

echo "`tput setaf 1`" | hexdump -C
00000000  1b 5b 33 31 6d 0a                       |.[31m.|

"..."이는 echo로 전달되기 전에 내용이 확장되기 때문에 작동합니다 .

사용하는 sed 명령은 모든 것을 감싸서 '확장 없이 sed에 전달하고 sed는 이를 모두 리터럴 텍스트로 처리합니다.

sed 명령 주위에 ""를 추가하면 이 문제를 해결할 수 있습니다.

echo "foo" | sed -e "s/\(foo\)/`tput setaf 1`\1`tput op`/g"

sed 명령에도 문제가 있습니다. 이스케이프되어 기억 된 패턴으로 표현되어야 합니다 (. 나는 또한 내가 항상 사용했던 첫 번째 암기 패턴을 결코 사용하지 않았습니다.)\(\)\0\1

관련 정보