我正在尝试使用Linux bash在文本文件中更改带有模式的行。 我尝试了sed命令:
sed -i 's/old/new/' < file.txt
此命令行的问题我必须指定确切的“旧”字。我想更改数千个文件,其中旧单词的模式如下:old1(,old2(,old3(,.... old10000( 我想将oldxxx(在所有文件中更改为old1)( 任何想法如何做到这一点?
答案 0 :(得分:3)
您可以使用以下内容:
sed -i 's/old[0-9]\{1,\}(/old1(/' file.txt
这匹配“old”后跟一个或多个数字和“(”并将其替换为“old1(”。
如果你的sed版本支持扩展正则表达式,你可以使用:
sed -r -i 's/old[0-9]+\(/old1(/' file.txt
相反,它做同样的事情。在某些版本的sed上,使用-E
开关代替-r
。
如果您在同一行上有多个模式“oldXX(”)的实例,您可能还需要g
修饰符(s/.../.../g
)来进行全局替换。