我试图用sed来替换文件中的某些字符串,并且遇到了一个问题。sed:替换部分正则表达式并保留前缀/后缀
我有以下字符串:
TEMPLATE_MODULE
TEMPLATE_SOME_ERR
TEMPLATE_MORE_ERR
我想更换TEMPLATE_MODULE一些字符串,并与模板开始和ERR结束与一个不同的字符串的所有字符串,如下:
TEMPLATE_MODULE ---> NEW_MODULE_NAME
TEMPLATE_SOME_ERR ---> NEW_MODULE_NAME_SOME_ERR
TEMPLATE_MORE_ERR ---> NEW_MODULE_NAME_MORE_ERR
更换TEMPLATE_MODULE的很简单:
find . -type f -print -exec sed -i "s/TEMPLATE_MODULE/NEW_MODULE_NAME/g" {} +
虽然我不知道如何处理其他部分。如果我寻找以TEMPLATE_ *开头的字符串,我还会捕获TEMPLATE_MODULE。
我也想保持SOME_ERR或MORE_ERR后缀所以这个解决方案是行不通的:
find . -type f -print -exec sed -i "s/TEMPLATE_.*_ERR$/NEW_MODULE_NAME/g" {} +
任何想法? 谢谢!
你有GNU sed的?输出'sed --version'? – Inian
请注意'。*'是一个正则表达式全局匹配,而不是普通的glob扩展。您需要启用'-r'来支持它,它只在'GNU sed'中可用 – Inian
我正在使用GNU sed 4.2.2 – Vardit