我很难理解以下功能。它应该对以-
或 以{-
using开头的线条进行着色blue
。如何仍然打印不匹配的行?
kls ()
{
rst='tput sgr0'
ctp='tput bold; tput setaf 39'
sed -E "s/^ *\{?-.*/${ctp}; printf '%s' '&';${rst}/e" <<< "$@"
}
答案1
代码中的两个变量rst
和包含 shell 命令。ctp
如果您只是让它们包含这些命令的输出,那就更好了,因为它允许我们/e
在 GNU 调用中将不安全选项删除到替换命令中sed
。
kls () {
local ctp="$( tput bold; tput setaf 39 )"
local rst="$( tput sgr0 )"
sed -E "s/^ *\{?-.*/${ctp}&${rst}/" <<< "$@"
}
这个问题似乎是在问如何避免打印不匹配的行。在本例中,您可以使用-n
with 选项来执行此sed
操作,该选项会禁用编辑脚本末尾每行的默认输出。然后将/p
选项添加到替换命令中,这将导致输出替换修改的行(与正则表达式不匹配的行将不会被输出)。
kls () {
local ctp="$( tput bold; tput setaf 39 )"
local rst="$( tput sgr0 )"
sed -E -n "s/^ *\{?-.*/${ctp}&${rst}/p" <<< "$@"
}
为了使其更像一个过滤器,请将重定向放入sed
:
kls () {
local ctp="$( tput bold; tput setaf 39 )"
local rst="$( tput sgr0 )"
sed -E -n "s/^ *\{?-.*/${ctp}&${rst}/p"
}
你可以使用它
printf '%s\n' "some" "strings" | kls
或者
kls <some-file
或者
some-general-command | kls