我在目录和子目录中有一些文件。我需要搜索所有文件,并在文件中的2个匹配模式之间打印文件名和内容。
例如假设我的文件如下所示。
File1.txt:
Pattern1
ABCDEFGHI
Pattern2
dafoaf
fafaf
dfadf
afadf
File2.txt
Pattern1
XXXXXXXXX
Pattern2
kdfaf
adfdaf
fdafad
我需要获得以下输出
File1.txt:
ABCDEGHI
File2.txt:
XXXXXXXX
等等,用新行分隔的目录和子目录下的所有文件。
答案 0 :(得分:0)
这可能对您有用:
find . \
-type f \
-exec awk 'BEGING {print FILENAME ":"} /Pattern1/ { p=1 ; next } /Pattern2/ {p=0} p==1 {print $0} END {print ""}' \{\} \;
注意,这会打印FILENAME
,即使找不到Pattern1
!
答案 1 :(得分:0)
这对你有用:
将此shell脚本创建为my_grep.sh
#!/bin/sh
grep -nH "Pattern" $1 >>temp
if [ `grep -c $1 temp` -eq 2 ]; then
limits=`grep $1 temp | cut -f2 -d:`
lower_limit=`echo $limits | cut -f1 -d" "`
upper_limit=`echo $limits | cut -f2 -d" "`
echo "$1:"
head -`expr $upper_limit - 1` $1 | tail -`expr $upper_limit - $lower_limit - 1`
fi
使用find命令搜索文件并触发此方案脚本:
$ find ./test -type f -exec ./my_grep {} \;
./test/File1.txt:
ABCDEFGHI
./test/File2.txt:
XXXXXXXXX