如何在Unix中grep包含多个单词的行

时间:2016-01-29 10:39:10

标签: shell unix grep

我有一个名为 companies.dat 的文件,其中包含多个公司名称的行。如何使用grep命令识别并显示名称中包含1个以上单词的所有公司?我不是在搜索任何特定的单词,只是每行超过1个单词的模式。

以下是文件内容:

id companyName placeId
1:British Airways:1
2:The New York Times:3
3:Toyota:3
4:BNP Paribas:2
5:EDF:2
6:Tesco:1
7:IBM:1
8:Google:3
9:Castlemaine:5

4 个答案:

答案 0 :(得分:2)

如果您特别需要使用grep,请检查空格:

grep -E '\w\s+\w' 

或者也许:

grep '[A-Za-z] [A-Za-z]' 

这也检查了空间两侧的字母,但我个人认为它不那么优雅。

答案 1 :(得分:1)

使用awk简单得多:

awk 'NF>1' file

答案 2 :(得分:0)

这是一种方式:

grep -o '[a-ZA-Z]*[[:blank:]]\+[a-ZA-Z[:blank:]]*' companies.dat

输出:

id companyName placeId
British Airways
The New York Times
BNP Paribas

如果你想省略第一行(id companyName placeId),那么:

tail -n +2 companies.dat |grep -o '[a-ZA-Z]*[[:blank:]]\+[a-ZA-Z[:blank:]]*'

输出:

British Airways
The New York Times
BNP Paribas

如果你也想要所有其他信息,那么只需从grep命令中省略-o标志:

tail -n +2 companies.dat |grep '[a-ZA-Z]*[[:blank:]]\+[a-ZA-Z[:blank:]]*'

输出:

1:British Airways:1
2:The New York Times:3
4:BNP Paribas:2

答案 3 :(得分:0)

使用awk更简单:

awk'NF> = 1'文件

根据您的字数要求,您可以更改该值。