sed:用相同的匹配替换匹配并添加更多文本

时间:2017-01-26 15:11:25

标签: regex unix sed

我有一个名为config.properties的文件,其中包含以下文字:

cat config.properties

// a lot of data
com.enterprise.project.AERO_CARRIERS = LA|LP|XL|4M|LU|4C
//more data

我的目标是保持相同的数据,但增加更多。对于此示例,我想添加此变量|JJ|PZ的赋值结果:

cat config.properties

// a lot of data
com.enterprise.project.AERO_CARRIERS = LA|LP|XL|4M|LU|4C|JJ|PZ
//more data

我一直在使用的命令是:

 sed 's/\(com\.enterprise\.project\.AERO_CARRIERS\s*\=\s*.+\)/\1\|JJ\|PZ/g' config.properties

但这不起作用。 我做错了什么?

3 个答案:

答案 0 :(得分:1)

作为使用sed等流编辑器的替代方法,只需使用ed中的原生文本编辑器UNIX - 天进行就地搜索和更换。使用的选项(-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_CARRIERS/搜索包含模式的行,部分s/$/\|JJ\|PZ/g|JJ|PZ追加到该行的末尾,w q写入并保存文件, -place。

答案 1 :(得分:0)

class MyFormatter(logging.Formatter): def format(self,record): msg = super(MyFormatter, self).format(record) return plain(msg) \s不符合POSIX:

  • 您可以使用+和空格字符(包括换行符)与[[:blank:]]匹配空格和制表符。

  • [[:space:]]可以替换为.+.\{1,\}

并且您不需要在此处使用反向引用,而是使用..*来输出与您的模式匹配的行:

&

答案 2 :(得分:0)

您可以先匹配:

sed '/com\.enterprise\.project\.AERO_CARRIERS\s*\=\s*.\+/ s/$/|JJ|PZ/g' config.properties