tail
with 의 출력 색상을 어떻게 지정합니까 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