带有字符串的注释行可能后跟 space/tab
Comment lines with string possibly followed by space/tab
在文本文件中,我想注释掉这些行:
<whatever>xyz
<whatever>xyz <whatever>
...这是一个特定的字符串,后跟行尾或白色space。
但我想单独留下这些行:
<whatever>xyz<something><whatever>
...这是后跟非白色字符的字符串space。
以下当然不是文字字符串:
- < whatever > 零个或多个可能为白色的字符-space.
除了白色的任何东西-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.
在文本文件中,我想注释掉这些行:
<whatever>xyz
<whatever>xyz <whatever>
...这是一个特定的字符串,后跟行尾或白色space。
但我想单独留下这些行:
<whatever>xyz<something><whatever>
...这是后跟非白色字符的字符串space。
以下当然不是文字字符串:
- < whatever > 零个或多个可能为白色的字符-space.
除了白色的任何东西-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.