我有我想从删除标点符号的字符串。
我开始
sed 's/[[:punct:]]/ /g'
但我对HP-UX不顺心,所有的时间问题,有的时候,我会一个后得到0和任何$
在我的字符串将dissappear。 所以我决定尝试做手工。
我有以下的代码,适用于所有的标点,我很感兴趣,但我似乎无法加方括号“[]”我的sed与别的,否则它不会取代任何东西,我没有得到一个错误,所以我不知道解决什么。
反正这是我目前已经和想补充的[]
来。
sed 's/[-=+|~!@#\$%^&*(){}:;'\'''\"''\`''\.''\/''\\']/ /g'
顺便说一句,我使用KSH在Solaris上,红帽与HP
你需要提前放置括号表达式:
sed 's/[][=+...-]/ /g'
由开口托架后放置“]”作为第一个字符立即,它被解释为设定,而不是一个结束括号的字符中的一员。 放置“[”括号内的任何地方使得该组的成员。
对于这个特定的字符集,还需要处理-
特别,因为你没有试图建立一个范围之间的字符[
和=
。 这样就把-
在课堂结束。
您可以手动做到这一点:
sed 's/[][\/$*.^|@#{}~&()_:;%+"='\'',`><?!-]/ /g'
这取出32标点符号,某些字符的顺序是非常重要的:
-
-
应该是这样的结尾-]
-
[]
应该是这样的[][other characters]
-
'
应该逃脱这样的'\''
- 不首先
^
像[^
- 不首先
[.
[=
[:
和结束.]
=]
:]
- 不是结束
$]
在这里你可以有,为什么所有的解释是http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_03
这里是我结束了最终代码
`echo "$string" | sed 's/[^a-zA-Z0-9]/ /g'`
我只好把=
和-
在最后。
(:这里下面EG)可使用正则表达式捕获技术也进行处理:
echo "narrowPeak_SP1[FLAG]" | sed -e 's/\[\([a-zA-Z0-9]*\)\]/_\1/g'
> narrowPeak_SP1_FLAG
\[ : literal match to open square bracket, since [] is a valid regex
\] : literal match to square close bracket
\(...\) : capture group
\1 : represents the capture group within the square brackets