我有一个字符串(或字符串列表),要在目录的所有文件中搜索。例如,如果我正在搜索 ABC,并且file1.txt
第 6 行包含 ABC,那么我需要该文件中的第 6、7、8 和 9 行。我希望所有此类输出都转到新的输出文件。
答案1
也许这很适合。使用grep -A
(after-context) 选项来输出匹配行和 3 个后续行。
find . -name file\* -exec grep -A 3 ABC {} \; > result-filename
笔记:你不应该放置result-filename
在directoryname
. (看:grep:输入文件“X”也是输出)。
覆盖多种模式:
find . -name file\* -exec egrep -A 3 'ABC|XYZ' {} \; > result-filename
或者文件中的多个模式(感谢 Evgeny Vereshchagin):
find . -name file\* -exec grep -A 3 -f patterns.txt {} \; > result-filename
答案2
以下将搜索当前目录中的所有非点文件:
sed '/string/{
$!N;$!N;$!N;$!N
w ./new_out_file
}' ./*
做多个-F
固定-string
grep -A
与不带和不带每个匹配前面的文件名的匹配find
,您首先需要一个流。
cat ./* | grep -A2 -Ff pattern_file >outfile
答案3
我得到了解决方案:
grep -A 2 -f 'INPUT.txt' *.* >> RESULT.txt