2016-11-14 213 views
0

以外的所有字符我正在使用此sed命令去除其所有(对于我)不必要字符的文档。sed删除除字母和'

sed 's/[^a-zA-Z]/ /g' 

但是挖掘我的数据后有点我意识到一个非常基本的错误: 不包括'削减所有我don't s转换don t s,这吮吸。

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

sed 's/[^a-zA-Z']/ /g'这显然是行不通的

sed 's/[^a-zA-Z\']/ /g'然而,这并不要么,我还以为\逃脱'?在行动

+0

你接受我的答案的任何理由?没有别人的答案,是否有与此相关的问题?告诉我,我会解决它。 –

+0

我看到你已经用解决方案编辑了你的问题。但是你在脚本中引用的代码不是实际的代码(sol1/sol2),所以存在问题,但我们没有看到它。 –

+0

只是真的要引起你的注意,老实说。我将sol1和sol2定义为您的解决方案,并希望将它们用于文件夹中的所有文件,但它不起作用(我的问题清楚了吗?)。希望你能再次帮助我。 – Jakob

回答

4

好老双引号来保护单引号,而不需要转义的:

sed "s/[^a-zA-Z']/ /g" <<< "don't ... do this" 

给出:

don't  do this 

编辑:您的代码似乎取代由空间非字母,但你的问题另有说明,所以我给你另一个版本,删除所有非字母/空格和多个空格(第二个表达式)。

sed -e "s/[^ a-zA-Z']//g" -e 's/ \+/ /' <<< "don't ... do this" 

结果:

don't do this 

EDIT2:替代解决方案能够保持单引号(森迪普•提供):

`'s/[^ a-zA-Z\x27]//g'` 

注:我第一次试图逃跑以下单引号测试的解决方案here和没有使用单引号为我工作(总是提示行续行),所以我想出了这些替代品。

+0

如果是删除,是不是应该用空字符串替换? – fedorqui

+0

我认为OP意味着“太空”。但你是对的。他的代码和问题之间存在不一致。我将编辑。 –

+2

可以通过使用'\ x27'来避免双引号...例如:'sed's/[^ a-zA-Z \ x27]// g'<<<“不要。 。做这个“' – Sundeep