正则表达式不与sed一起工作

时间:2013-01-07 04:50:28

标签: regex sed

我在文件中有这个文字

"0000000441244"
"0000000127769"

我想用'L'替换所有零

我正在尝试这个,没有任何东西可以被打开

sed -e 's/0+/L/g' regex.txt

sed -e 's/(0+)/L/g' regex.txt

我想知道我哪里错了

5 个答案:

答案 0 :(得分:10)

Posix兼容版本应使用00*代替0+

sed -e 's/00*/L/g' regex.txt

作为旁注,如果您想将g甚至"000000012700009"转换为"000000012709",则只需要"L127L9"标记。否则,*中的's/00*/L/'无论如何都会在开头包含全部零。

答案 1 :(得分:3)

在Linux(GNU版本的sed)中,sed -e 's/0\+/L/g' regex.txtsed -r 's/0+/L/g' regex.txt都可以, 但如果您使用的是Mac(BSD版本的sed),它们都不起作用,而是必须使用它: sed -E 's/0+/L/g' regex.txt

实际上最后一个也适用于Linux,所以它更便携。 对于这个特殊问题,@ perreal的建议也是可移植的。但是当你在正则表达式中确实需要+或其他元字符时,你最好知道如何解决它。

答案 2 :(得分:1)

试试这个

sed -e 's/0\+/L/g' regex.txt

答案 3 :(得分:0)

如果您使用的是除 GNU之外的任何Unix ,您可以自己安装GNU sed,也可以切换到awkrubyperl

例如:

ruby -e 'ARGF.each{|l|puts l.gsub(/0+/, "L")}' regex.txt

使用awk:

awk '{gsub("0+", "L"); print $0}' regex.txt

扩展正则表达式可通过-E而非-e在Mac OS / X上使用。

来自“BSD通用命令手册”:

-E    Interpret regular expressions as extended (modern) regular 
      expressions rather than basic regular expressions (BRE's).
      The re_format(7) manual page fully describes both formats.

答案 4 :(得分:0)

这可能适合你(GNU sed):

sed 'y/0/L/' file