我将如何对tail
with的输出进行着色sed
?
echo "`tput setaf 1`foo`tput op`"
按预期工作
echo "foo" | sed -e 's/(foo)/`tput setaf 1`\0`tput op`/g'
然而,没有。
我在这里缺少什么?
小智 6
echo 命令中的反引号 `` 产生一个进程,它的输出被替换到 echo 命令行中。你可以看到这个,例如
echo "`tput setaf 1`" | hexdump -C
00000000 1b 5b 33 31 6d 0a |.[31m.|
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为 的内容"..."
在传递给 echo 之前被扩展。
您正在使用的 sed 命令将所有内容都包装起来,'
因此它被传递给 sed 而不进行扩展,并且 sed 将其全部视为文字文本。
您可以通过将 "" 放在 sed 命令周围来解决此问题
echo "foo" | sed -e "s/\(foo\)/`tput setaf 1`\1`tput op`/g"
Run Code Online (Sandbox Code Playgroud)
您的 sed 命令也有错误。的(
和)
需要进行转义\(
,并\)
表示该记住的模式。我也从来没有用过\0
我一直用\1
作为第一个记住的模式。
小智 5
必须是sed
吗?
echo "foo bar baz" | grep --color=auto "bar"
Run Code Online (Sandbox Code Playgroud)
bar
默认情况下,上面将以红色突出显示。手册页说您可以选择与环境变量一起使用的颜色GREP_COLORS
。
要使其打印所有行并仅突出显示bar
:
echo "foo bar baz" | grep -E --color=auto "^|bar"
Run Code Online (Sandbox Code Playgroud)