grep regex:从目录中的所有文件中提取模式

时间:2010-07-12 16:23:32

标签: regex grep

让我们说一个目录有两个文件。以下是内容

FILE1.TXT

tagstart random string tagend

tagstart random string tagend

FILE2.TXT

tagstart random string tagend

tagstart random string tagend

我想grep目录并提取具有以下模式的行

tagstart <any string> tagend

我还想将输出传递给另一个文件。基本上grep命令将产生这样的输出文件

out.txt

tagstart random string tagend

tagstart random string tagend

tagstart random string tagend

tagstart random string tagend

3 个答案:

答案 0 :(得分:1)

FILE1.TXT:

# This is the file nr.1
tagstart 123 tagend
tagstart abc tagend
kill tagstart def tagend kenny

FILE2.TXT:

# This is the file nr.2
tagstart 123 tagend
tagstart abc tagend
kill tagstart xxx tagend kenny

此命令将提取标记及其随附的字符串:

 cat file1.txt file2.txt | grep -o -E "tagstart(.*?)tagend" > output.txt

output.txt的:

tagstart 123 tagend
tagstart abc tagend
tagstart def tagend
tagstart 123 tagend
tagstart abc tagend
tagstart xxx tagend

额外的cookie供您享用:

此命令将执行类似的操作,但仅显示已排序的唯一记录及其出现(用于统计目的):

 sort file1.txt file2.txt | grep -o -E "tagstart(.*?)tagend" | uniq -c | \
 awk '{print $2" "$3" "$4" : "$1}' > output.txt

output.txt的:

tagstart 123 tagend : 2
tagstart abc tagend : 2
tagstart def tagend : 1
tagstart xxx tagend : 1

答案 1 :(得分:0)

grep 'tagstart random string tagend' file1.txt file2.txt > out.txt

答案 2 :(得分:0)

正则表达式很少是解析xml的好方法。您是否考虑过tagstart one tagstart two tagend one tagend等情况?

tagstart one tagstart two tagend one tagend

tagstart one tagstart two tagend

tagstart two tagend

tagstart two tagend one tagend
都满足你的标准。你想要哪一个?