我有一个名为 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
答案 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'文件
根据您的字数要求,您可以更改该值。