【问题标题】:"sed" command to remove a line that match an exact string on first word [duplicate]“sed”命令删除与第一个单词上的确切字符串匹配的行[重复]
【发布时间】:2015-10-29 16:11:37
【问题描述】:

我正在编写一个小型 bash 脚本。我需要删除与仅在该行的第一个单词中的确切单词匹配的整行。

这就是文本文件的样子:

John is a dumb
Maria is awesome
Toni and Maria are funny

我想删除第二行。

现在,我可以匹配确切的单词“maria”,但它也删除了第三行:

sed -i "/\b\(maria\)\b/d" file.txt

如何只指定第一个单词?

谢谢!

【问题讨论】:

  • 使用^ 将您的模式锚定到行首。 The Anchor Characters
  • 你可以试试sed -i "/^maria\b/I d" file.txt .....^ 是起始行,I 不区分大小写
  • 为什么这个问题被否决了?它具有对目标的精确描述、样本数据集和实现目标的方法。
  • @RamboRamon 非常感谢,我真的很生气!

标签: regex linux bash sed


【解决方案1】:

目前您正在寻找被单词边界包围的“maria”(由\b 表示)。而不是在行首之前查找“maria”(由^ 表示。)注意我也删除了不必要的括号并添加了/I 标志,这将使搜索不区分大小写。您的原件不会匹配“玛丽亚”。

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

编辑:将不区分大小写的标志固定为 I 而不是 i!

【讨论】:

  • 它在 ksh 中不起作用?如果文本的行为“maria-d”,那么呢?不工作
  • ksh 是一个外壳。 sed 是一个程序。它们并不真正相关。我解决了问题中的示例数据,但我确信在大多数语言中,单词边界断言匹配连字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 2011-09-25
相关资源
最近更新 更多