sed删除字母和'

Jak*_*kob 1 bash sed

我正在使用此sed命令剥离所有(对我而言)不必要字符的文档。

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

但是,在挖掘了一些数据之后,我意识到了一个非常基本的错误:不包括'将我don't的所有s都切成don ts,这很烂。

所以我想'在我的正则表达式中包含它。如果我可以这样称呼我,我仍然对这种“编码”还是陌生的,所以请原谅我的新手错误甚至更好,请向我解释!

sed 's/[^a-zA-Z']/ /g' 这显然不起作用

sed 's/[^a-zA-Z\']/ /g' 但这也不是,我以为可以\逃脱'

Jea*_*bre 5

好的旧双引号实际上可以保护单引号而无需转义:

sed "s/[^a-zA-Z']/ /g" <<< "don't ... do this"
Run Code Online (Sandbox Code Playgroud)

给出:

don't     do this
Run Code Online (Sandbox Code Playgroud)

编辑:您的代码似乎用空格替换了非字母,但是您的问题另有说明,所以我给您另一个版本,以删除所有非字母/空格以及多个出现的空格(第二个表达式)。

sed -e "s/[^ a-zA-Z']//g" -e 's/ \+/ /' <<< "don't ... do this"
Run Code Online (Sandbox Code Playgroud)

结果:

don't do this
Run Code Online (Sandbox Code Playgroud)

EDIT2:能够保留单引号的替代解决方案(由Sundeep提供):

`'s/[^ a-zA-Z\x27]//g'`
Run Code Online (Sandbox Code Playgroud)

注意:我首先尝试按照此处测试的解决方案对单引号进行转义,但没有一个对单引号有效(总是提示继续行),因此我想出了这些选择。

  • 可以使用`\ x27` ...来避免双引号,例如:sed's / [^ a-zA-Z \ x27] / / g'&lt;&lt;&lt;“不要...这样做” (2认同)