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

标签 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 的行?

最佳答案

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

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

并使用 IGNORECASE=1如果您不希望它不区分大小写。

要匹配确切的单词(例如 Bow 但不是 bowtie),您可以使用 GNU awk,感谢 Ed Morton 的建议,< > anchor 以指示单词的限制(如其他语言中的 \b):

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

测试

$ cat a
Sword of Dragons
Staff of Fire
Bow of Noxious
Staff of Light
Bow I like Bow
this is a bow
and this a bowtie
$ awk -F"Bow" 'NF==2' a
Bow of Noxious
$ awk -F"Bow" 'BEGIN {IGNORECASE=1} NF==2' a
Bow of Noxious
this is a bow
and this a bowtie
$ awk -F'\\<Bow\\>' 'BEGIN {IGNORECASE=1} NF==2' a
Bow of Noxious
this is a bow

关于linux - 仅打印一次包含字符串的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28768022/

相关文章:

linux - 将光盘插入 USB DVD 驱动器时没有触发任何事件

php - 我需要在服务器端做什么来接受 wget 通过简单的 HTTP POST 上传的文件?

regex - 使用 bash 查找字符串中某个模式的所有出现

通过 CMD 的 Java 命令在 C#.NET 中不起作用

linux - 我如何在 openSUSE Tumbleweed 上安装 Aptana 3?

PHP session 在 SSL 上重置

linux - grep -o : Keep input line format

linux - 将列表 1 中的字符串与列表 2 中的值进行比较,并导出到新位置

linux - 使用条件 linux 管道输出流

linux - 如何使用 grep 和字符串在多个文件中搜索单个单词或短语?