在文本文件中,我想注释掉这些行:
<whatever>xyz
<whatever>xyz <whatever>
...这是一个字符串,后跟行尾或空格。
但我想单独留下这些界限:
<whatever>xyz<something><whatever>
...表示字符串后跟一个不是空格的字符。
以下内容当然不是文字字符串:
我试过这个:
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和普通的空间角色;但这不是强制性的。
对于此输入文件,&#34; in.txt&#34;:
xyz
xyz #
xyz.
我正在运行Linux Mint,即gnu sed。
答案 0 :(得分:2)
特殊字符在括号表达式中失去意义。
试试这个:
sed -Ee '/(xyz$)|(xyz )|(xyz\t)/s/^/# /g'
> gsed -Ee '/(xyz$)|(xyz )|(xyz)\t/s/^/# /g' in.txt
# xyz
# xyz #
xyz.
答案 1 :(得分:0)
$ cat r.sh
awk '{
a = $0 ~ /xyz/
b = $0 ~ /xyz[^ \t]/
if (a && !b) print "# " $0
else print $0
}' "$@"
用法
sh r.sh file