sed:这个替换命令有什么问题?

时间:2018-06-18 04:12:22

标签: regex sed replace

我正在尝试使用此sed命令替换java文件中的package行:

sed -i "s/package org\.objectweb\.asm[.\w]*;/package $package;/" FILE

但它没有按预期工作。这个替换命令出了什么问题?

2 个答案:

答案 0 :(得分:2)

我假设你想匹配\w匹配的内容,加上一个点。 \w[]字符集中不起作用[.a-zA-Z0-9_]。请尝试sed -i "s/package org\.objectweb\.asm[.a-zA-Z0-9_]*;/package $package;/" FILE

regex_rep = r" repeat "

答案 1 :(得分:0)

实际上,sed不支持匹配数字,字母或下划线的\w类似Perl的shorthand character class

在POSIX模式中,您可以使用\w而不是[_[:alnum:]],其中[:alnum:]POSIX character class匹配任何字母数字字符。 [._[:alnum:]]似乎就是你在这里使用的意思:

sed -i "s/package org\.objectweb\.asm[._[:alnum:]]*;/package $package;/" FILE
                                     ^^^^^^^^^^^^^^

但是,根据您的字符串结构判断,您可以匹配任何字符,但;使用否定括号表达式[^;]

sed -i "s/package org\.objectweb\.asm[^;]*;/package $package;/" FILE
                                     ^^^^^