我将如何对tailwith的输出进行着色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)
| 归档时间: |
|
| 查看次数: |
4578 次 |
| 最近记录: |