Regex sed:用相同的匹配项替换匹配项并添加更多文本
我有一个名为config.properties的文件,其中包含以下文本: cat config.properties 我的目标是保留相同的数据,但添加更多数据。对于本例,我想将此变量| JJ | PZ的赋值添加到以下结果中: cat config.properties 我一直在使用的命令是:Regex sed:用相同的匹配项替换匹配项并添加更多文本,regex,unix,sed,Regex,Unix,Sed,我有一个名为config.properties的文件,其中包含以下文本: cat config.properties 我的目标是保留相同的数据,但添加更多数据。对于本例,我想将此变量| JJ | PZ的赋值添加到以下结果中: cat config.properties 我一直在使用的命令是: sed 's/\(com\.enterprise\.project\.AERO_CARRIERS\s*\=\s*.+\)/\1\|JJ\|PZ/g' config.properties 但这不起作用。我
sed 's/\(com\.enterprise\.project\.AERO_CARRIERS\s*\=\s*.+\)/\1\|JJ\|PZ/g' config.properties
但这不起作用。我做错了什么?作为使用sed等流编辑器的替代方法,只需使用本机文本编辑器,即UNIX days提供的用于就地搜索和替换的文本编辑器。使用的选项-s与POSIX兼容,因此在可移植性方面没有问题
printf '%s\n' ",g/com.enterprise.project.AERO_CARRIERS/ s/$/\|JJ\|PZ/g" w q | ed -s -- inputFile
部件g/com.enterprise.project.AERO|u/CARRIERS/搜索包含图案的行,部件s/$/\\\\JJ\\\PZ/g在该行末尾附加| JJ | PZ,w q将文件写入并保存到位。\s和+与POSIX不兼容:
您可以将空格和制表符与[[:blank:]匹配,将空格字符(包括换行符)与[[:space:]匹配
.+可以替换为。\{1,\}或*
您不需要在此处使用backreference,而是使用&来输出与您的模式匹配的行:
sed 's/^com\.enterprise\.project\.AERO_CARRIERS[[:blank:]]*=[[:blank:]]*.\{1,\}/&|JJ|PZ/'
您可以首先匹配:
sed '/com\.enterprise\.project\.AERO_CARRIERS\s*\=\s*.\+/ s/$/|JJ|PZ/g' config.properties
它对我有用。您的sed可能不支持\s-请改为尝试[[:blank:]哦,等等,我在撒谎,它不起作用..+不在sed基本正则表达式中;您必须使用BRE或sed-r GNU或sed-E BSD sed的..*或.\+GNU扩展。谢谢!!错误是使用了.+而不是.\+.Nitpick:可移植性取决于工具不同实现的POSIX兼容性。仅仅存在POSIX规范并不能保证可移植性——如果我使用POSIX规范中定义的功能,而工具不一致,那么我确实存在可移植性问题。@BenjaminW:我真的很感激这个事实,我看到的所有POSIX合规性词语都有点口语化。谢谢你的澄清!现在重新措辞!
sed 's/^com\.enterprise\.project\.AERO_CARRIERS[[:blank:]]*=[[:blank:]]*.\{1,\}/&|JJ|PZ/'
sed '/com\.enterprise\.project\.AERO_CARRIERS\s*\=\s*.\+/ s/$/|JJ|PZ/g' config.properties