在开始和结束时使用Regex的Unix替换模式是已知的

时间:2014-06-02 18:55:29

标签: regex unix search replace

我需要替换几个文件中的子字符串,其中只知道子字符串的开头和结尾,并且其间的内容可以是长度和类型的变量

我尝试使用Regex但无法确定模式

E.g。以下是一些行

  1. Dragon Age Inquisition有成人锁定模式,让孩子不使用

  2. 巫师3有一个锁定模式,以便孩子们不能使用它

  3. 超级马里奥对成年人有锁定,只有孩子才能使用

  4. 我希望在所有3行

    上用'check'替换'Lock'和'so'之间的所有内容

    提前致谢:)

2 个答案:

答案 0 :(得分:3)

sed -i '' 's/Lock.*so/check/' filename

Lockso完全匹配,.*匹配它们之间的任何子字符串。它匹配最长的子字符串,因此如果该行上有多个so,它将替换所有内容直到最后一个。

答案 1 :(得分:0)

带有“-p”的Perl是一个很好的帮助。

示例:

# repperl.pl
s/(Lock).+(so)/\1 check \2/

使用以下命令运行:

perl -p repperl.pl < repperl.txt

输出:

Dragon Age Inquisition has a Lock check so that kids don't use it
Witcher 3 has a Lock check so that kids cannot use it
Super Mario has a Lock check so that only kids can use it

它以这种方式编写,因此您可以在适当的位置修改文件;请参阅“Perl -i”,或只使用sed / awk