2013-01-07 168 views
4

我在文件本文正则表达式不与SED

"0000000441244" 
"0000000127769" 

我想替换“L”

我想这并没有什么全零被chnaged工作

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

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

我想知道我错在哪里

回答

7

POSIX兼容的版本应该使用00*而不是0+

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

作为一个侧面说明,你只需要g标志,如果你要转换"000000012700009"甚至"000000012709""L127L9"。否则,'s/00*/L/'中的*无论如何都将在开头包括全零。

1

如果您正在使用的Unix 的任何味道,除了 GNU试试这个

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

,您可以安装GNU sed的自己或只需切换到awkrubyperl

例如:

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

用awk:

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

扩展正则表达式都可以在Mac OS/X通过-E而非-e

从 “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. 
+0

为什么人们做简单的事情过于复杂 – user175386049

+0

哈哈,你不恨当这种情况发生?仅仅因为你知道'00 *'和'0 +'完全一样,并不意味着它在你需要时会流入你的脑海。 '00 *'解决方案非常棒。 GNU也是如此。 :) –

2

在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的建议也是可移植的。但是,当你确实需要+或正则表达式中的其他元字符时,你最好知道如何解决它。

0

这可能为你工作(GNU SED):

sed 'y/0/L/' file