Goo*_*990 5 diff shell-script text-processing files
寻找一种方法来递归搜索包含多行字符串的所有文件的存储库并返回包含它的文件名。该段落只是一个大约 30 行的标题。所以我知道pcregrep
可以做多行搜索。但是你需要把整个表达式放进去。因为这是我要搜索的一个很长的段落,我想把它放在变量中,然后对那个变量做一个 grep 。所以基本上它会find . -name "*.[ch]" | xargs pcregrep -M $paragraph
但是这不起作用任何人都可以指出我正确的方向。
由于您尝试匹配文件的前 30 行,因此您可以将文本保存在文件中,例如ref_file
,然后用于diff
将参考文件与每个文件中的前 30 行进行比较:
find . -name "*.[ch]" -exec ./myscript {} \; -print
Run Code Online (Sandbox Code Playgroud)
哪里./myscript
#!/bin/sh
head -n 30 "$1" | diff - /path/to/ref_file >/dev/null
Run Code Online (Sandbox Code Playgroud)
因此,-print
只有在前一个命令的-exec
值为true时才会执行第一个命令,即参考文件与当前文件的前 30 行之间没有差异。
或者,如果您喜欢不使用脚本并将文件名保存在logfile
:
find . -type f -exec sh -c 'head -n 30 "$0" | diff - /path/to/ref_file >/dev/null' {} \; -print >logfile
Run Code Online (Sandbox Code Playgroud)
请注意,这假设您正在寻找完全匹配的内容,否则diff
将以 退出1
,即使差异是一个空格。