我有一个文件里包含这段文字
"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
顺便提一下,只有当你想将"000000012700009"
或"000000012709"
转换为"L127L9"
时才需要使用g
标志。否则,在's/00*/L/'
中的*
会包括字符串开头的所有零。
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
。+
或其他元字符时,最好知道如何解决它。试试这个
sed -e 's/0\+/L/g' regex.txt
ruby -e 'ARGF.each{|l|puts l.gsub(/0+/, "L")}' regex.txt
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.
00*
和0+
完全一样,并不意味着当你需要它时它就会跳进你的脑海。00*
的解决方案真是太棒了。GNU 也很赞 :) - Ray Toalsed 'y/0/L/' file