我正在使用此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' 但这也不是,我以为可以\逃脱'?
好的旧双引号实际上可以保护单引号而无需转义:
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)
注意:我首先尝试按照此处测试的解决方案对单引号进行转义,但没有一个对单引号有效(总是提示继续行),因此我想出了这些选择。