Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 字符串的Grep正则表达式;“公司”;并替换为“;“老公司”;_Perl_Awk_Sed_Grep - Fatal编程技术网

Perl 字符串的Grep正则表达式;“公司”;并替换为“;“老公司”;

Perl 字符串的Grep正则表达式;“公司”;并替换为“;“老公司”;,perl,awk,sed,grep,Perl,Awk,Sed,Grep,我需要搜索字符串“company”,但该字符串以不同的方式重复 例如:“公司”更改了名称,但没有完全更改,只是添加了一个新名称。所以我现在需要做的是,找到公司,换成老公司 现在,我需要到处查找公司名称,更改名称,我需要作废以查找公司旧版,因为在某些情况下,它已经存在 我已经完成了grep-rl“company”,但它为我带来了所有的功能。如果你想进行替换,可能类似于 perl -pe 'BEGIN { %h=("company old" => "company old", "company

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

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

现在,我需要到处查找公司名称,更改名称,我需要作废以查找公司旧版,因为在某些情况下,它已经存在


我已经完成了grep-rl“company”,但它为我带来了所有的功能。

如果你想进行替换,可能类似于

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

这将通过将“公司旧版”替换为它们本身来绕过它们,然后用新字符串替换任何其他匹配项。

如果您只想打印包含
公司
但不包含
公司旧版
的每一行,则只需:

awk '/company/ && !/company old/' file
如果您想替换不属于
旧公司的
公司的所有实例,请执行以下操作:

$ 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

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

提供准确的输入和所需的输出将非常好。您期望的
公司
是否具有特殊属性?您可能想看看
pcregrep
,它支持类似perl的前瞻模式,如
公司(?!old)
(匹配“公司”如果后面没有“old”)。但是,是的,你的问题的具体说明是什么?@CongMa不需要pcre grep,
grep-oP'company(?!\s+old\b)
ok,,如果做了“grep-oP'company(?!\s+old\b)”,那么“grep-oP'company(?!\s+old\b)”只会查找company而不是**company old,对吗?谢谢,我也会尝试,如果不起作用,我可以回滚