带有字符串的注释行可能后跟 space/tab

Comment lines with string possibly followed by space/tab

在文本文件中,我想注释掉这些行:

<whatever>xyz
<whatever>xyz <whatever>

...这是一个特定的字符串,后跟行尾或白色space。

但我想单独留下这些行:

<whatever>xyz<something><whatever>

...这是后跟非白色字符的字符串space。

以下当然不是文字字符串:


我试过这个:

sed -e '/xyz[ $]/s/^/# /g' in.txt > out.txt

... 但它与紧跟在字符串之后的行尾行不匹配。 似乎 $ 符号在方括号内时被视为文字。


这是我目前的技巧:

sed -e '/xyz /s/^/# /g' in.txt > out.txt
sed -e '/xyz$/s/^/# /g' -i out.txt

...但由于速度原因,我宁愿只解析一次文件。 我还想匹配 \t 以及普通的 space 字符;但这不是强制性的。

对于这个输入文件,"in.txt":

xyz
xyz #
xyz.

我是 运行 Linux Mint,即 gnu sed。

$ cat r.sh 
awk '{
   a = [=10=] ~ /xyz/
   b = [=10=] ~ /xyz[^ \t]/
   if (a && !b) print "# " [=10=]
   else         print [=10=]
 }' "$@"

用法

sh r.sh file

特殊字符在括号表达式中失去意义。

试试这个:

sed -Ee '/(xyz$)|(xyz )|(xyz\t)/s/^/# /g'

> gsed -Ee '/(xyz$)|(xyz )|(xyz)\t/s/^/# /g' in.txt
# xyz
# xyz #
xyz.