使用"sed"命令删除第一个单词匹配的行

4
我是一名小型bash脚本开发者。我需要删除匹配整行的单词,只有在行的第一个单词中才能精确匹配。
文本文件的格式如下:
John is a dumb
Maria is awesome
Toni and Maria are funny

我希望删除第二行。
现在,我可以匹配到“maria”这个单词,但是它也会删除第三行。
sed -i "/\b\(maria\)\b/d" file.txt

如何仅指定第一个单词?
谢谢!

2
使用 ^ 将您的模式锚定到行的开头。锚字符 - Etan Reisner
2
你可以尝试使用 sed -i "/^maria\b/I d" file.txt 命令......其中 ^ 表示匹配行首,I 表示不区分大小写。 - Jose Ricardo Bustos M.
2
为什么这个问题被踩了?它有一个明确的目标描述,一个样本数据集,以及自己实现目标的方法。 - Rambo Ramon
1
@RamboRamon非常感谢,我真的很沮丧! - Dani Polo
1个回答

6

目前你正在寻找由单词边界(用\b表示)包围的“maria”。相反,要寻找以行开头为前缀的“maria”(用^表示)。请注意,我还删除了不必要的括号并添加了/I标志,这将使搜索不区分大小写。原始内容无法匹配“Maria”。

sed -i "/^maria\b/Id" file.txt

编辑:修正大小写不敏感标志为I而非i!


它在ksh中不起作用吗?如果文本中有'maria-d'这一行呢?会出问题。 - rohansr002
ksh是一种shell。sed是一个程序。它们并没有真正的关联。我在问题中处理了示例数据,但我相信在大多数语言中,单词界定符会匹配连字符。 - miken32

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接