Sed中的正则表达式空格字符

时间:2013-03-19 20:16:05

标签: regex sed

我几乎尝试了一切(我猜)但没有任何效果。 (操作系统:Ubuntu 12.04)

要匹配的表达式(从文本文件中删除):

a c 4
a k 23
o s 1

我尝试了什么:

's/[[a-z][:space:][a-z][:space:][0-9]]\{1,\}//gi'
's/.\s.\s[0-9]+//g'
's/[:alpha:][:space:][:alpha:][:space:][:digit:]+'

3 个答案:

答案 0 :(得分:16)

这应该匹配:

sed 's/[a-z][ ]*[a-z][ ]*[0-9]*//gi'

你的第一次尝试错过了几个方括号,你不需要最外面的一个:

sed 's/[a-z][[:space:]][a-z][[:space:]][0-9]\{1,\}//gi' input

你的第二个例子失败了,因为你需要逃避+,但它仍然只适用于gnu sed:

sed 's/.\s.\s[0-9]\+//g' input

最后一个也有一些类似的问题:

sed 's/[[:alpha:]][[:space:]][[:alpha:]][[:space:]][[:digit:]]\+//' input

答案 1 :(得分:1)

中间的那个关闭!你必须逃脱加号,原因超出我的意义。 我还将点“.”替换为“[a-z]”,因此它只匹配字母。

sed 's/[a-z]\s[a-z]\s[0-9]\+//g'

旧版sed的可用便携版 - 版本(Hello,Mac用户!)。某些sed实施在“+”上很挑剔:

sed 's/[a-z]\s[a-z]\s[0-9][0-9]*//g'

答案 2 :(得分:1)

[...]定义了一个字符类。 [a-z]匹配az中的任何字符。要匹配连续的字符,您必须为每个字符使用一个类:[a-z][[:space:]][a-z]

要使+具有特殊含义,您必须反斜杠:[0-9]\+

命名字符类仅适用于字符类,即[[:alpha:]][[:space:]]