我有一个关于使用shell脚本在文件中获取数据的问题。 我想搜索一些具有多个条件的行。
例如,如果我有这个文件:
TX VIDEO ID 34 B 33 SIZE 672 SRC -1 DST 11 T 0.1 1
TX CBR ID 35 B 35 SIZE 10 SRC -1 DST 11 T 0.1 1
RX VOIP ID 0 B 0 SIZE 32 SRC -1 DST 3 D 0.001 0
RX VOIP ID 8 B 8 SIZE 32 SRC -1 DST 5 D 0.001 1
RX VOIP ID 20 B 20 SIZE 32 SRC -1 DST 8 D 0.001 1
RX VIDEO ID 9 B 9 SIZE 1490 SRC -1 DST 5 D 0.002 1
RX VIDEO ID 21 B 21 SIZE 1490 SRC -1 DST 8 D 0.002 1
TX INF_BUF ID 37 B 10 SIZE 776 SRC 1 DST 5 T 0.102 1
TX INF_BUF ID 39 B 22 SIZE 776 SRC 2 DST 8 T 0.102 1
在此文件中,我有"RX VIDEO"
和"TX VIDEO"
行。我要从中获取数据的第一个条件是"RX VIDEO"
中的所有"DST 3 && DST 5"
。
答案 0 :(得分:0)
我假设你想要RX VIDEO
的行也包含DST 3
或DST 5
$ grep 'RX VIDEO.*DST [35]' a.txt
RX VIDEO ID 9 B 9 SIZE 1490 SRC -1 DST 5 D 0.002 1
答案 1 :(得分:0)
对于多个条件,您可以将greps输出传递给另一个grep。
如果您想在文件中搜索AAA和BBB的行,您可以这样做:
grep 'AAA' file | grep 'BBB'
或者您可以使用只有一个grep的正则表达式搜索它:
grep -e 'AAA.*BBB' -e 'BBB.*AAA' file
如果匹配任何-e
选项后的表达式,您将得到一个结果。这意味着它的行为类似于或。
两个例子都会找到这样的行:
AAABBB
AAA BBB
BBB AAA
BBBAAA
AAA-BBB
AAA---BBB
AAAA BBB
xAAAAAAA BBB AAAAA
等等。
您的示例可能是:
grep 'RX VIDEO' file | grep -e 'DST 3' -e 'DST 5'
这将与RX VIDEO
或DST 3
一起搜索DST 5
。