使用bash删除参数中的特殊字符

时间:2017-10-29 10:32:18

标签: shell

我想使用bash脚本从给定的参数中删除(和)。请帮助我。用于删除其他spl字符的sed命令无法在此处运行

3 个答案:

答案 0 :(得分:0)

您在评论中提供的sed命令中只有一个额外的空格。这会导致正则表达式仅替换“加上空格”中的任何字符(例如,它会将a. b转换为ab,但它不会仅匹配单个.而没有空格,因此a.b仍为a.b)。

您应该使用sed 's/[. ()]//g'代替。例如:

$ echo "((ab.))(" | sed 's/[. ()]//g'
ab

请注意,这与GNU sed一致 - 其他版本可能表现不同。

另请注意,.不需要在此转义,因为它位于字符集([...])中。如果在字符集之外使用未转义,则表现为正常的单字符通配符。

答案 1 :(得分:0)

在你的例子中(评论中给出)yiu想要改变

((12234.())11234

现在这可以通过几种方式实现。你可以这样做

sed -e "s/[()]//g" input.txt

这将删除框括号之间的所有字符。

或者你可以这样做

sed -e "s/[^0-9]//g" input.txt

这将删除任何不是数字的字符。

更新

我尝试使用bash你没有escap点字符(。)所以你可以做这样的事情

sed -e "s/[().]//g" input.txt

答案 2 :(得分:0)

使用bash脚本:

$ cat foo.sh
#!/bin/bash
echo "${1//[(.)]/}"

运行它:

$ bash foo.sh "((12234.())"
12234