Unix脚本以递归方式搜索目录和子目录以grep并在文件中的2个模式之间打印内容

时间:2013-08-30 07:50:02

标签: unix scripting

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

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

File1.txt:
Pattern1
ABCDEFGHI
Pattern2
dafoaf
fafaf
dfadf
afadf

File2.txt
Pattern1
XXXXXXXXX
Pattern2
kdfaf
adfdaf
fdafad

我需要获得以下输出

File1.txt:
ABCDEGHI
File2.txt:
XXXXXXXX

等等,用新行分隔的目录和子目录下的所有文件。

2 个答案:

答案 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
相关问题