【问题标题】:Replace possible phrases with word in sed?用sed中的单词替换可能的短语?
【发布时间】:2020-05-16 10:49:59
【问题描述】:

我希望能够替换整个短语,例如:

white_phone
white; phone
white.phone
phone;white

根据词组中是否包含“white”一词,使用单个词组“REJECT”。我试过使用:

sed -e 's/*white*/REJECT/g' -e 's/*white/REJECT/g' -e 's/white*/REJECT/g' file

但这只是替换了“白色”这个词,并留下了我不想要的短语的其余部分。

如果有帮助的话,这些短语也是制表符分隔的。

【问题讨论】:

  • 这个问题可能会有所帮助:stackoverflow.com/questions/8822097/…
  • 短语,但在您提供的4个示例中,短语重合,所以我' d 认为您实际上指的是 lines;但是,您明确指定短语也是制表符分隔。你的意思是?您可以在一行中有多个以制表符分隔的短语?如果是这种情况,请添加一个示例来涵盖此用例。
  • Stack Overflow regex tag info page 对初学者有一些提示。
  • 答案很好,但解释为什么?简单的解释是* 本身不是正则表达式,你需要.*

标签: linux bash sed


【解决方案1】:

您需要为此使用 sed 反向引用:

sed -e 's/\(^.*\)white.*phone\(.*$\)/\1REJECT\2/g' -e 's/\(^.*\)phone.*white\(.*$\)/\1REJECT\2/g' < file 

根据您提供的输入,该命令对我有效。

【讨论】:

  • 这不适用于不包含单词 phone 的输入行; OP 说基于短语中是否包含“白色”一词,因此,除非他对问题的措辞非常糟糕,否则此答案不会满足他的要求。
【解决方案2】:

这将为您提供所需的输出,据我了解您需要。如果不是这种情况,请显示您所需输出的示例。

sed -i 's/.*white.*/REJECT/' file

【讨论】:

  • g 不是必需的
  • 你是绝对正确的 :) 谢谢!我会编辑答案。
【解决方案3】:

这可能对你有用(GNU sed):

sed '/white/cREJECT' file

【讨论】:

    猜你喜欢
    • 2022-11-06
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    相关资源
    最近更新 更多