打印仅包含一次字符串的行

时间:2015-02-27 14:59:55

标签: linux grep command uniq

例如,这是我的名为Weapons的文件:

Sword of Dragons
Staff of Fire
Bow of Noxious
Staff of Light
Bow of Noxious

我想输入一个只显示包含Bow一次的行的命令。

以下是我的尝试:

grep -n "Bow" Weapons

但它只显示包含Bow的所有行。如何仅显示包含Bow一行的行?

2 个答案:

答案 0 :(得分:3)

您可以在Bow中使用awk作为字段分隔符,如果这导致一行中有2个字段,则只需打印:

awk -F"Bow" 'NF==2' file

如果您希望它不依赖于案例,请使用IGNORECASE=1

要匹配确切的字词(例如Bow而不是bowtie),您可以使用GNU awk,感谢Ed Morton的建议,< { {1}}锚点表示单词的限制(如>在其他语言中):

\b

测试

awk -F'\\<Bow\\>' 'BEGIN {IGNORECASE=1} NF==2' a

答案 1 :(得分:2)

您可以在sort命令中使用build in选项:

sort -u file | grep -i bow

或者如果你坚持使用独特的

sort file | uniq  | grep -i bow