10

我在文件中有这个文本

"0000000441244"
"0000000127769"

我想用'L'替换所有零

我正在尝试这个并且没有任何改变

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

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

我想知道我错在哪里

4

5 回答 5

14

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

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

附带说明一下,g如果您想转换"000000012700009"甚至"000000012709"转换为"L127L9". 否则,*in's/00*/L/'无论如何都会在开头包含所有零。

于 2013-01-07T05:05:16.847 回答
5

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

于 2013-01-07T05:02:38.200 回答
1

尝试这个

sed -e 's/0\+/L/g' regex.txt
于 2013-01-07T04:57:14.687 回答
0

如果您使用GNU 之外的任何 Unix 风格,您可以自己安装 GNU sed 或直接切换到awkorrubyperl.

例如:

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.
于 2013-01-07T05:00:50.800 回答
0

这可能对您有用(GNU sed):

sed 'y/0/L/' file
于 2013-01-07T06:46:08.743 回答