我在文件中有这个文本
"0000000441244"
"0000000127769"
我想用'L'替换所有零
我正在尝试这个并且没有任何改变
sed -e 's/0+/L/g' regex.txt
sed -e 's/(0+)/L/g' regex.txt
我想知道我错在哪里
Posix 兼容版本应该使用00*
而不是0+
:
sed -e 's/00*/L/g' regex.txt
附带说明一下,g
如果您想转换"000000012700009"
甚至"000000012709"
转换为"L127L9"
. 否则,*
in's/00*/L/'
无论如何都会在开头包含所有零。
在 Linux(GNU 版本的 sed)中,两者sed -e 's/0\+/L/g' regex.txt
都sed -r 's/0+/L/g' regex.txt
可以,但如果您使用的是 Mac(BSD 版本的 sed),它们都不起作用,相反,您必须使用:
sed -E 's/0+/L/g' regex.txt
.
实际上最后一个也适用于 Linux,所以它更便携。对于这个特殊问题,@perreal 的建议也是可移植的。但是当您确实需要+
正则表达式中的其他元字符时,您最好知道如何解决它。
尝试这个
sed -e 's/0\+/L/g' regex.txt
如果您使用除GNU 之外的任何 Unix 风格,您可以自己安装 GNU sed 或直接切换到awk
orruby
或perl
.
例如:
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.
这可能对您有用(GNU sed):
sed 'y/0/L/' file