如何使用SED替换[]括号

nit*_*s24 15 shell ksh replace brackets sed

我有一个字符串,我想删除标点符号.

我开始了

sed 's/[[:punct:]]/ /g'
Run Code Online (Sandbox Code Playgroud)

但是我在HP-UX上遇到的问题一直不喜欢,有时我会得到一个0,而且$在我的字符串中的任何内容都会消失.所以我决定尝试手动完成.

我有以下代码,它适用于我感兴趣的所有标点符号,除了我似乎无法添加方括号"[]"到我的sed与其他任何东西,否则它不会替换任何东西,我不会得到一个错误,所以我不知道该解决什么问题.

无论如何,这是我目前拥有并想要添加[]的内容.

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

顺便说一下,我在Solaris,Redhat和HP上使用KSH

Wil*_*ell 21

您需要在表达式的早期放置括号:

sed 's/[][=+...-]/ /g'
Run Code Online (Sandbox Code Playgroud)

通过将']'作为第一个字符放在开始括号之后,它被解释为字符集的成员而不是结束括号.在括号内的任何位置放置'['使其成为集合的成员.

对于这个特殊的字符集,你还需要-特别处理,因为你没有尝试在[和之间构建一系列字符=.所以把它放在-课程的最后.


per*_*eal 5

您还可以指定要保留的字符[带反转]:

sed 's/[^a-zA-Z0-9]/ /g'
Run Code Online (Sandbox Code Playgroud)

  • 这是 shell 将 `$word2` 解释为变量,尝试 `echo 'word1$word2'` 或 `echo word1\$word2` (2认同)

nit*_*s24 1

这是我最终得到的代码

`echo "$string" | sed 's/[^a-zA-Z0-9]/ /g'`
Run Code Online (Sandbox Code Playgroud)

我必须把=and-放在最后。