我对sed代码有疑问。 我不想在这里做
来自
uri.csv
/path/file.jpg
/path/file2.bmp
收件人
/path/*.jpg
/path/*.bmp
我使用此代码是因为我用sed查看错误。
sed -r 's/(.+\/).+?(?=\.)(.+)/\\1*\\2/g' uri.csv
sed: -e expression #1, char 31: Invalid preceding regular expression
你能帮我吗?
答案 0 :(得分:1)
您所使用的POSIX ERE不支持解决方法(通过-r
选项启用)。
您的正则表达式最多匹配一个或多个字符,最多/
(使用(.+\/)
),然后将最少1个以上的字符与.+?
匹配,然后(?=\.)
只需要一个.
就可以立即出现在右侧,并且(.+)
会尽可能多地将1个以上的字符捕获到组2中。
您可以使用
sed -r 's,(.*/)?.*\.,\1*.,' uri.csv
或者,使用-E
选项:
sed -E 's,(.*/)?.*\.,\1*.,' uri.csv
或使用POSIX BRE:
sed 's@\(.*/\)\{0,1\}.*\.@\1*.@' uri.csv
请参见online sed
demo。
注意:使用,
作为分隔符时,不需要转义/
字符。
答案 1 :(得分:0)
您不能将Look Around与sed一起使用。最好使用perl单线:
$ perl -pe 's/(.+\/).+?(?=\.)(.+)/$1*$2/g' file
/etc/designs/smartpos/images/*.svg
/etc/designs/smartpos/images/*.svg