【问题标题】:Keep lines containing "list of different words" like pattern [duplicate]保留包含“不同单词列表”的行,如模式 [重复]
【发布时间】:2018-11-23 09:17:40
【问题描述】:

如何保持所有行匹配所有这些单词 toto OR titi OR clic OR SOMETHING 并删除任何其他行?

如果我选择sed '/toto/ p ' file,例如,我无法选择titi

我正在寻找类似于 Perl 正则表达式的东西 ^ (word1|word2|word3|andsoon).*。但是,sed 需要它,因为它将被集成到更大的 sed 脚本中。

目标是保留所有以word 开头的行,其中word 是一组单词中的任何单词。

【问题讨论】:

  • 如何调用较大的sed 脚本?如果它被称为sed,那么手头的任务就是删除所有与相应表达式不匹配的行,如果它被称为sed -n,你实际上必须选择你感兴趣的行。但是我的总体建议是设置您的第一个 awk 规则以删除不匹配的行。

标签: sed


【解决方案1】:

这里的答案取决于您的主脚本是如何被调用的。假设您有一个包含以下内容的文件:

foo
car
bar

并且你对匹配“foo”和“bar”的行感兴趣,那么你可以这样做:

sed '/foo\|bar/!d'
sed -n '/foo\|bar/!d;p'
sed -n '/foo\|bar/p'

所有这些都会输出:

foo
bar

如果你愿意这样做:

sed '/foo\|bar/p'

你实际上复制了这些行。

foo
foo
car
bar
bar

如您所见,根据-n 标志的使用情况,处理方式会有所不同。

-n, --quiet, --silent禁止自动打印图案空间

来源:man sed

一般来说,我的建议是删除sed 脚本开头不需要的行。

【讨论】:

  • 差不多...所以我将其改编为 sed -i -E '/^(word1.*|word2|word3.*|etc.)$/ !d' 谢谢
  • @francoisP 不要忘记转义你的| 和括号,它是/^\(word1\|word2\|word3\|...\).*$/!d
猜你喜欢
  • 2022-01-23
  • 2021-03-07
  • 1970-01-01
  • 2011-09-09
  • 2017-07-25
  • 1970-01-01
  • 2016-02-02
  • 2020-05-25
  • 1970-01-01
相关资源
最近更新 更多