我已经尝试了几乎所有东西(我猜)但没有任何效果。(操作系统: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:]+'
这应该匹配:
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
中间那个很近!由于我无法理解的原因,您必须逃避加号。我还将点“ .
”替换为“”,[a-z]
因此它只匹配字母。
sed 's/[a-z]\s[a-z]\s[0-9]\+//g'
旧版本的奖励便携式版本sed
(您好,Mac 用户!)。一些sed
实现对“ +
”很挑剔:
sed 's/[a-z]\s[a-z]\s[0-9][0-9]*//g'
[...]
定义一个字符类。[a-z]
匹配从a
到 的任何字符z
。要匹配连续字符,您必须为每个字符使用一个类:[a-z][[:space:]][a-z]
。
为了+
具有特殊含义,您必须将其反斜杠:[0-9]\+
.
命名字符类仅在字符类中起作用,即[[:alpha:]][[:space:]]
.