我几乎尝试了一切(我猜)但没有任何效果。 (操作系统: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:]+'
答案 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]
匹配a
到z
中的任何字符。要匹配连续的字符,您必须为每个字符使用一个类:[a-z][[:space:]][a-z]
。
要使+
具有特殊含义,您必须反斜杠:[0-9]\+
。
命名字符类仅适用于字符类,即[[:alpha:]][[:space:]]
。