我在文件本文正則表達式不與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也是如此。 :) –