0

我在目录和子目录中有一些文件。我需要搜索所有文件并打印文件中两个匹配模式之间的文件名和内容。

例如,假设我的文件如下所示。

File1.txt:
Pattern1
ABCDEFGHI
Pattern2
dafoaf
fafaf
dfadf
afadf

File2.txt
Pattern1
XXXXXXXXX
Pattern2
kdfaf
adfdaf
fdafad

我需要得到以下输出

File1.txt:
ABCDEGHI
File2.txt:
XXXXXXXX

以新行分隔的目录和子目录下的所有文件依此类推。

4

2 回答 2

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 命令搜索文件并触发此 schell 脚本:

$ find ./test -type f -exec ./my_grep {} \;
./test/File1.txt:
ABCDEFGHI
./test/File2.txt:
XXXXXXXXX
于 2013-09-13T09:58:07.313 回答
0

这可能对您有用:

find . \
     -type f \
     -exec awk 'BEGING {print FILENAME ":"} /Pattern1/ { p=1 ; next } /Pattern2/ {p=0} p==1 {print $0} END {print ""}' \{\} \;

请注意,这会打印FILENAME,即使Pattern1未找到!

于 2013-08-30T08:48:20.063 回答