我已经尝试了几乎所有的方法(我想),但是没有任何效果。(操作系统: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:]]
。