Sed删除多个字符

时间:2015-02-13 19:07:07

标签: sed

我想替换多个字符

echo "R \e&p[%20])l(a/ce" | sed 's|%20|-|g;s|\[||g;s|]||g;s| ||g;s|#||g;s|/||g;s|)||g;s|(||g;s|&||g;s|\\||g'

Rep-lace

有没有其他方法可以这样做,还是这样呢?

将%20替换为 - 并将其余部分替换为

2 个答案:

答案 0 :(得分:4)

我使用

echo "R \e&p[%20])l(a/ce" | sed 's/%20/-/g; s/[][ #/()&\\]//g'

因为字符集更容易以这种方式扩展。要知道的是]必须是集合中第一个被识别为集合的一部分而不是结束括号的字符。

根据您想要做什么,可能值得考虑反转字符集并替换除指定数量的字符之外的所有字符集。例如:

echo "R \e&p[%20])l(a/ce" | sed 's/%20/-/g; s/[^-[:alnum:]]//g'

这会将%20替换为-,然后删除除-和字母数字字符以外的所有字符。

答案 1 :(得分:0)

Bash中,您可以在参数展开 + sed中使用:

bash$ STR="R \e&p[%20])l(a/ce"
bash$ echo "${STR/"%20"/-}" | sed -r 's/[^a-z-]//gi'
Rep-lace