2013-01-07 246 views
4

我在文件本文正則表達式不與SED

"0000000441244" 
"0000000127769" 

我想替換「L」

我想這並沒有什麼全零被chnaged工作

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

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

我想知道我錯在哪裏

回答

7

POSIX兼容的版本應該使用00*而不是0+

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

作爲一個側面說明,你只需要g標誌,如果你要轉換"000000012700009"甚至"000000012709""L127L9"。否則,'s/00*/L/'中的*無論如何都將在開頭包括全零。

1

如果您正在使用的Unix 的任何味道,除了 GNU試試這個

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

,您可以安裝GNU sed的自己或只需切換到awkrubyperl

例如:

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. 
+0

爲什麼人們做簡單的事情過於複雜 – user175386049

+0

哈哈,你不恨當這種情況發生?僅僅因爲你知道'00 *'和'0 +'完全一樣,並不意味着它在你需要時會流入你的腦海。 '00 *'解決方案非常棒。 GNU也是如此。 :) –

2

在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的建議也是可移植的。但是,當你確實需要+或正則表達式中的其他元字符時,你最好知道如何解決它。

0

這可能爲你工作(GNU SED):

sed 'y/0/L/' file