我正在尝试使用此sed命令替换java文件中的package
行:
sed -i "s/package org\.objectweb\.asm[.\w]*;/package $package;/" FILE
但它没有按预期工作。这个替换命令出了什么问题?
答案 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
^^^^^