如何保存grep匹配的行?

时间:2014-02-27 10:56:20

标签: regex bash grep

我有这样一个grep:

iarr=`grep -Poh '.*INPUT' file.txt`
oarr=`grep -Poh '.*OUTPUT' file.txt`

使用file.txt的这个内容:

INPUT  hello.txt
OUTPUT stack.txt
INPUT  stack.txt
OUTPUT hello.txt
INPUT  overflow.txt
OUTPUT overflow.txt
OUTPUT byebye.txt
INPUT  byebye.txt
INPUT  nick.txt
OUTPUT jesus.txt

Te输出为:

iarr

INPUT hello.txt
INPUT stack.txt
INPUT overflow.txt
INPUT byebye.txt
INPUT nick.txt

oarr

OUTPUT stack.txt
OUTPUT hello.txt
OUTPUT overflow.txt
OUTPUT byebye.txt
OUTPUT jesus.txt

好吧,但我想知道输入需要哪些文件名,输出是什么,我的意思是:

  • 如果INPUT文件在实际行的下方行中有一个OUTPUT(同一文件),则该项目将从oarr中删除。
  • 如果OUTPUT文件在实际行的上面一行中有一个INPUT(同一个文件),则该项目将从iarr中删除。

根据这些条件,结果如下:

iarr

INPUT hello.txt
INPUT overflow.txt
INPUT nick.txt

oarr

OUTPUT stack.txt
OUTPUT byebye.txt
OUTPUT jesus.txt

我正在尝试获得此结果,但我不知道如何在grep命令中存储正则表达式的特定匹配行...这是我想要解决的问题,你有另一个吗?这样做的想法? 可能是逐行阅读......

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你只需要第一次出现每个文件名。您可以使用awk实现此目的:

awk '!x[$2]++' file.txt

将给出

INPUT  hello.txt
OUTPUT stack.txt
INPUT  overflow.txt
OUTPUT byebye.txt
INPUT  nick.txt
OUTPUT jesus.txt

您可以继续处理。