Bash:将文件中的所有行与一个字符串或另一个匹配(并保持顺序)

时间:2018-09-11 14:04:45

标签: bash

我有一个文本文件,其内容是这样的(“ ...”表示“更多文本”):

input file path/to/file1.txt
...
...
result ....
...
input file path/to/file2.txt
...
...
result ....
...
input file path/to/file3.txt
...
...
result ....
...

我想过滤从input fileresult开始的行,并保持原始的出现顺序。 编辑:但是input file是输入文件的绝对路径...所以我想过滤该部分,但只获取路径的最后一部分(我是指文件名本身)

期望的结果应该是:

input file file1.txt
result ....
input file file2.txt
result ....
input file file3.txt
result ....

我该怎么做?

1 个答案:

答案 0 :(得分:2)

$ grep -E '^(input file|result)' inputFile > outFile
$ cat outFile
input file ...
result ....
input file ...
result ....
input file ...
result ....

如果要过滤掉没有这些行的行,请使用-v选项。

$ grep -Ev '^(input file|result)' inputFIle
...
...
...
...
...
...
...
...
...

如果path/to是所有file*.txt的固定路径,则可以使用此sed命令来打印所需的结果

$ sed -e 's|path/to/||g' -nE -e '/^(input|result)/p' inputFile
input file file1.txt
result ....
input file file2.txt
result ....
input file file3.txt
result ....