我如何使用SED替代括号[](How do i replace [] brackets using

2019-06-27 15:09发布

我有我想从删除标点符号的字符串。

我开始

sed 's/[[:punct:]]/ /g'

但我对HP-UX不顺心,所有的时间问题,有的时候,我会一个后得到0和任何$在我的字符串将dissappear。 所以我决定尝试做手工。

我有以下的代码,适用于所有的标点,我很感兴趣,但我似乎无法加方括号“[]”我的sed与别的,否则它不会取代任何东西,我没有得到一个错误,所以我不知道解决什么。

反正这是我目前已经和想补充的[]来。

sed 's/[-=+|~!@#\$%^&*(){}:;'\'''\"''\`''\.''\/''\\']/ /g'

顺便说一句,我使用KSH在Solaris上,红帽与HP

Answer 1:

你需要提前放置括号表达式:

sed 's/[][=+...-]/ /g'

由开口托架后放置“]”作为第一个字符立即,它被解释为设定,而不是一个结束括号的字符中的一员。 放置“[”括号内的任何地方使得该组的成员。

对于这个特定的字符集,还需要处理-特别,因为你没有试图建立一个范围之间的字符[= 。 这样就把-在课堂结束。



Answer 2:

您还可以指定你想保留[与反转]中的字符:

sed 's/[^a-zA-Z0-9]/ /g'


Answer 3:

您可以手动做到这一点:

sed 's/[][\/$*.^|@#{}~&()_:;%+"='\'',`><?!-]/ /g'

这取出32标点符号,某些字符的顺序是非常重要的:

  • -应该是这样的结尾-]
  • []应该是这样的[][other characters]
  • '应该逃脱这样的'\''
  • 不首先^[^
  • 不首先[. [= [:和结束.] =] :]
  • 不是结束$]

在这里你可以有,为什么所有的解释是http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_03



Answer 4:

这里是我结束了最终代码

`echo "$string" | sed 's/[^a-zA-Z0-9]/ /g'`

我只好把=-在最后。



Answer 5:

(:这里下面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


文章来源: How do i replace [] brackets using SED