给定以下内容file.txt
:
this is line 1
# this is line 2
this is line 3
我想用sed#
开头的行替换为\e[31m${lineContent}\e[0m
。这将为该特定行着色。另外,我需要将颜色\e[31m
设置为变量color
。(此示例的期望输出将使第二行带有颜色)。我有以下内容:
function colorLine() {
cat file.txt | sed ''/"$1"/s//"$(printf \e[31m $1 \e[0m)"/g''
}
colorLine "#.*"
color
到目前为止,我不知道该变量,因为我不确定该怎么做。其输出为(第二行为红色):
this is line 1
#.*
this is line 3
显然是从字面上解释替换字符串。我的问题是如何使用匹配的行生成替换字符串?
我知道我可以做些容易得多的事情,例如将sed附加\e[31m
到以开头的所有行的开头#
,但是将sed与正则表达式一起使用很重要。
colorLine() {
sed "/$1/s//"$'\e[31m&\e[0m/' file.txt
}
colorLine "#.*"
进行了多次修复,但是它用于$1
从函数的参数中识别出模式,然后使用ANSI-C引号对转义序列进行编码-并修复了(最初)[
在转义序列之后缺少的颜色重置序列。它还避免了“ UUoC-的无用使用cat
”的费用。
固定文件名不是很理想,但将其固定留给读者练习。
如果我需要
\e[31m
成为变量,该怎么办$color
。如何更改报价?
我有一个colour-diff
脚本,其中包含(使用Perl表示法-我已经像以前一样使用ANSI C引用将其翻译为Bash表示法):
reset=$'\e[0m'
black=$'\e[30;1m' # 30 = Black, 1 = bold
red=$'\e[31;1m' # 31 = Red, 1 = bold
green=$'\e[32;1m' # 32 = Green, 1 = bold
yellow=$'\e[33;1m' # 33 = Yellow, 1 = bold
blue=$'\e[34;1m' # 34 = Blue, 1 = bold
magenta=$'\e[35;1m' # 35 = Magenta, 1 = bold
cyan=$'\e[36;1m' # 36 = Cyan, 1 = bold
white=$'\e[37;1m' # 37 = White, 1 = bold
使用这些变量,您可以根据需要创建函数:
colorLine() {
sed "/$1/s//$blue&$reset/“ file.txt
}
设置这些变量的位置取决于定义函数的位置。就我自己而言,我可能会使用完整的参数解析来制作脚本而不是函数,然后从那里开始。青年汽车
查看ANSI颜色转义序列列表,以获取更全面的颜色列表(以及其他效果,包括背景色和前景色)以及用于生成颜色的转义序列。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句