我试图在文本中标识国家缩写。正则表达式在egrep中工作,但不在sed中
egrep "^[A-Z]{2}$" file
似乎工作。但是当我在sed上尝试正则表达式时,它不起作用。这就是我正在使用的
sed 's/^[A-Z]{2}$/someCountry/' file
我在做什么错?
我试图在文本中标识国家缩写。正则表达式在egrep中工作,但不在sed中
egrep "^[A-Z]{2}$" file
似乎工作。但是当我在sed上尝试正则表达式时,它不起作用。这就是我正在使用的
sed 's/^[A-Z]{2}$/someCountry/' file
我在做什么错?
man sed
并搜索“扩展”。 egrep
是grep
,在'扩展'正则表达式中有一个标志(-e
),而sed有一个类似的标志。否则,语法是不同的,你必须更多地使用\
。
POSIX sed
使用BREs里面(基本的正则表达式)。在那些,你可以使用相当于{2}
,但你必须逃生括号。 egrep
支持EREs(扩展正则表达式)。作为扩展BREs的一个副作用,转义规则是不同的(使得结果表达式更容易编写)。
参考:
当BRE匹配单个字符,一子表达式,或反向参考后面是格式
"\{m\}"
,"\{m,\}"
,o与该间隔表达式一起,它应匹配重复连续出现的BRE将匹配的内容。的米和Ñ的值是十进制整数范围0 <= m<= n<= {RE_DUP_MAX
},其中米指定发生的正确或最小数目和Ñ指定出现的最大数目。表达"\{m\}"
应完全匹配米出现前述BRE的,"\{m,\}"
应匹配至少m个,并且"\{m,n\}"
应米和Ñ(含)之间的任何匹配出现的次数。
在最后一个'''之前加一个'/'并在第一个'''之后加一个'^'并使用sed的选项'-E'。 – Cyrus
-E似乎是问题所在。谢谢 – Roy
在某些系统上,扩展的正则表达式'sed'标志在我的系统上是'-r'或'-E','-E'和'-r'存在,但只有'-r'被记录。 – 2015-10-18 21:49:37