【问题标题】:Grep regex for string "company" and replace "company old"字符串“company”的Grep正则表达式并替换“company old”
【发布时间】:2015-04-16 11:43:23
【问题描述】:

我需要搜索字符串“company”,但该字符串以不同的方式重复。

例如:“公司”更改了名称,但没有完全更改,只是添加了一个新名称。所以我现在需要做的是,找到公司,换成旧公司。

现在我需要在任何地方找到公司名称,要更改我需要取消的名称以查找 company old,因为在某些情况下它已经存在。

我已经完成了 grep -rl "company" ,但都给我带来了。

【问题讨论】:

  • 提供准确的输入和所需的输出会很棒。
  • 你预期的company有特殊属性吗?
  • 您可能想看看pcregrep,它支持像company(?! old) 这样的类似perl 的前瞻模式(如果后面没有“old”,则匹配“company”)。但是,是的,您的问题的具体说明是什么?
  • @CongMa 不需​​要 pcre grep,grep -oP 'company(?!\s+old\b)'
  • 好的,如果这样做 "grep -oP 'company(?!\s+old\b)'" 只会寻找 company ** 而不是** 公司老了,对吧?

标签: perl awk sed grep


【解决方案1】:

如果你想执行替换,可能是这样的

perl -pe 'BEGIN { %h=("company old" => "company old", "company" => "Whizzbang, Inc.") }
    s/(company old|company)/$h{$1}/g'

这将绕过“公司旧”事件,将它们替换为自己,然后用新字符串替换任何其他匹配项。

【讨论】:

  • 谢谢,我也试试,如果不行,我可以回滚
【解决方案2】:

如果您只想打印包含company 但不包含company old 的每一行,那么您只需要:

awk '/company/ && !/company old/' file

如果您想替换所有不属于company oldcompany 实例:

$ cat file
foo company old bar company indeed
$ awk '{gsub(/company old/,RS); gsub(/company/,"Acme Corp"); gsub(RS,"company old")}1' file
foo company old bar Acme Corp indeed

如果是其他问题,请编辑您的问题以举例说明。

【讨论】:

    猜你喜欢
    • 2018-07-13
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2021-11-29
    • 2018-04-06
    相关资源
    最近更新 更多