如何注释文件夹中所有文件中与模式匹配的行

如何注释文件夹中所有文件中与模式匹配的行

在一个文件夹中我有很多文件。如果存在特定模式,我想注释每一行

示例模式:

`include "xyz.vh"

预期输出:

// `include "xyz.vh"

所以请给我同样的指导。

答案1

这可能对你有帮助,

sed '/`include "xyz.vh"/s/^/\/\/ /' filename

如果你想在所有文件中搜索模式,那么你可以使用这个命令,

find . -type f -exec sed '/`include "xyz.vh"/s/^/\/\/ /' {} \;

另一种方法是使用perl,

perl -p0e 's/(.*`include "xyz.vh"\n)/\/\/ \1/g' file

答案2

用于grep过滤包含所需模式的文件

grep -rlZ 'pattern'
  • -r递归搜索目录(默认为当前目录)包括子目录的选项
  • -l仅列出与模式匹配的文件名
  • -Z由零字节分隔的输出(以处理包含换行符等异常字符的文件名),然后可以将其传递到类似sedperl使用的程序xargs -0来执行搜索和替换

把它们放在一起:

grep -rlZ '`include "xyz.vh"' | xargs -0 perl -i -pe 's|^|// | if /`include "xyz.vh"/'
  • -i选项将修改输入文件本身的更改

答案3

awk

awk '/`include "xyz.vh"/ {print "// " $0; next} 1' file.txt

要使用最新的 GNU 就地编辑文件awk

awk -i inplace '/`include "xyz.vh"/ {print "// " $0; next} 1' file.txt

对于所有其他awk实现,请使用临时文件:

awk '/`include "xyz.vh"/ {print "// " $0; next} 1' file.txt >file.txt.tmp && \
    mv file.txt.tmp file.txt

对于从当前目录开始的所有文件,递归地:

find . -type f -exec awk -i inplace '/`include "xyz.vh"/{print "// " $0; next} 1' {} \;

find . -type f -exec sh -c 'awk "/`include "xyz.vh"/ {print "// " $0; next} 1" "$1" \
       >"$1".tmp && mv "$1".tmp "$1"' _ {} \;

相关内容