我已经尝试了几乎所有东西(我猜)但没有任何效果。(操作系统: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:]].