我确定有更好的方法可以做到这一点(我将采用完全不同的方法来回答),但我需要一种方法来以编程方式修改某些其他文本之前的文本在它之前的某个地方限定字符串。例如,文件可能如下所示。
foo bar bat car
foo shmat lat dog
blat cat mat fat
foo bat cat
每当foo位于同一行之前的某个位置时,我想用bat
替换cap
。
所以我想到了这个。
perl -0777 -pe 's/(?<=foo.*)bat/cap/g' file
然而,我收到错误
Variable length lookbehind not implemented in regex m/(?<=foo.*)bat/ at -e line 1.
所以我想知道如何进行可变长度的后视或者是否有更好的方法我可以在单行中获得这个?
答案 0 :(得分:1)
在Perl中使用\K
令牌(匹配重置器)进行可变长度的后视:
foo.*\Kbat
的Perl:
perl -0777 -pe 's/foo.*\Kbat/cap/g' file