我在文件本文正则表达式不与SED
"0000000441244"
"0000000127769"
我想替换“L”
我想这并没有什么全零被chnaged工作
sed -e 's/0+/L/g' regex.txt
sed -e 's/(0+)/L/g' regex.txt
我想知道我错在哪里
我在文件本文正则表达式不与SED
"0000000441244"
"0000000127769"
我想替换“L”
我想这并没有什么全零被chnaged工作
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"
。否则,'s/00*/L/'
中的*
无论如何都将在开头包括全零。
如果您正在使用的Unix 的任何味道,除了 GNU试试这个
sed -e 's/0\+/L/g' regex.txt
,您可以安装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
扩展正则表达式都可以在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.
在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的建议也是可移植的。但是,当你确实需要+
或正则表达式中的其他元字符时,你最好知道如何解决它。
这可能为你工作(GNU SED):
sed 'y/0/L/' file
为什么人们做简单的事情过于复杂 – user175386049
哈哈,你不恨当这种情况发生?仅仅因为你知道'00 *'和'0 +'完全一样,并不意味着它在你需要时会流入你的脑海。 '00 *'解决方案非常棒。 GNU也是如此。 :) –