我想注释与多个文件中的模式不匹配的行。例如,我想注释所有在文件A1.sh
中不包含"my_pattern"的行。我可以在文件A1.sh
内使用g!/my_pattern/s/^/#/
但是假设从 A 到 Z 有 26 个目录,如果我的文件存在于每个目录中,例如
A/A1.sh
B/B1.sh
如何一次性评论它们?
使用 GNU sed 和 bash:
sed -i '/my_pattern/!s/.*/#&/' [A-Z]/*.sh
使用 GNU sed 和 csh:
sed -i '/my_pattern/!s/.*/#&/' [A-Z]/*.sh
在命令行中使用 for 循环和 vim 命令执行此操作:
for ch in {A..Z}; do
gvim -c ':g!/my_pattern/s/^/#/|:exit' "${ch}/${ch}1.sh"
done
sed
替代方案:
for ch in {A..Z}; do
sed -i 's/^my_patter/#&/' "${ch}/${ch}1.sh"
done