我在文件中有这个文字
"0000000441244"
"0000000127769"
我想用'L'替换所有零
我正在尝试这个,没有任何东西可以被打开
sed -e 's/0+/L/g' regex.txt
sed -e 's/(0+)/L/g' regex.txt
我想知道我哪里错了
答案 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.txt
和sed -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,也可以切换到awk
或ruby
或perl
。
例如:
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