我试图替换所有出现的字符串:
https://support.office.com/en-us/article/Check-for-accessibility-issues-a16f6de0-2f39-4a2b-8bd8-5ad801426c7f?ui=en-US&rs=en-US&ad=US
xyz
。这是针对当前目录下的所有文件完成的。
我使用了以下命令:
find . -type f | xargs sed -i 's/https\:\/\/support\.office\.com\/en\-us\/article\/Check\-for\-accessibility\-issues\-a16f6de0\-2f39\-4a2b\-8bd8\-5ad801426c7f\?ui\=en\-US\&rs\=en\-US\&ad\=US/xyz/g';
但它没有做任何事。我认为我逃避特殊角色的方式是错误的。我该如何纠正?
现在,我使用\
为每个非字母数字字符添加前缀。
答案 0 :(得分:2)
您可以使用其他分隔符,例如~
,并避免转义sed
命令中的大多数符号。
尝试此命令:
find . -type f -exec sed -i 's~https://support\.office\.com/en-us/article/Check-for-accessibility-issues-a16f6de0-2f39-4a2b-8bd8-5ad801426c7f?ui=en-US&rs=en-US&ad=US~xyz~g' '{}' +
即使?
也不需要在BRE中进行转义,因为它与文字?
匹配。
答案 1 :(得分:1)
sed默认使用BRE,你转义了一些字符,这在BRE中具有特殊含义,例如,\?
并不意味着文字?
,而是意味着,zero or one occurrence
< / p>
您应该调整转义..或使用sed中/
以外的分隔符。
...sed 's@http://foo?bar@xyz@g`
答案 2 :(得分:1)
如果perl
没问题,请查看quotemeta
$ cat ip.txt
https://support.office.com/en-us/article/Check-for-accessibility-issues-a16f6de0-2f39-4a2b-8bd8-5ad801426c7f?ui=en-US&rs=en-US&ad=US
$ perl -pe 's|\Qhttps://support.office.com/en-us/article/Check-for-accessibility-issues-a16f6de0-2f39-4a2b-8bd8-5ad801426c7f?ui=en-US&rs=en-US&ad=US|xyz|' ip.txt
xyz
并使用exec
选项代替xargs
find -type f -exec perl -i -pe 'print "$ARGV" if s|\Qhttps://support.office.com/en-us/article/Check-for-accessibility-issues-a16f6de0-2f39-4a2b-8bd8-5ad801426c7f?ui=en-US&rs=en-US&ad=US|xyz|' {} +
答案 3 :(得分:0)
尝试了它没有工作
sed的@ wp-content / plugins / bwp-minify / min /?f = wp-content / plugins / share-this / css / style.css,wp-content / plugins / wp-to-twitter / CSS / Twitter的feed.css,可湿性粉剂内容/主题/ yourgarden / style.css中,可湿性粉剂内容/插件/聪明,待办事项列表/ CSS /聪明,待办事项列表,frontend.css,WP-内容/插件/聪明,待办事项列表/ CSS / jQuery的UI-fresh.css?的wp-content / CSS / all.css @” sed:-e表达式#1,char 344:未终止的`s'命令