在Linux中,我可以運行命令:在UNIX上運行時SED性問題與Linux的
sed -r 's/^(.{2})0(.*)$/\1\2/' filename
但是我不能做-r
所以我嘗試:
sed 's/^(.{2})0(.*)$/\1\2/' filename
我得到以下錯誤:
sed: command garbled: s/^(.{2})0(.*)$/\1\2/
我覺得有一個簡單的修復,但我不能弄明白。
在Linux中,我可以運行命令:在UNIX上運行時SED性問題與Linux的
sed -r 's/^(.{2})0(.*)$/\1\2/' filename
但是我不能做-r
所以我嘗試:
sed 's/^(.{2})0(.*)$/\1\2/' filename
我得到以下錯誤:
sed: command garbled: s/^(.{2})0(.*)$/\1\2/
我覺得有一個簡單的修復,但我不能弄明白。
以下是爲我工作:
sed 's/^\(.\{2\}\)0\(.*\)$/\1\2/'
你需要逃避(){}
編輯:這也將解決你的問題,是短。沒有必要繼續搜索到行的末尾。
sed 's/^\(.\{2\}\)0/\1/'
量詞語法{n,m}
和捕獲組是擴展正則表達式類的一部分。默認情況下,sed
僅使用基本正則表達式。如果你讀你的Linux系統上的手冊頁,你會清楚地看到什麼-r
做:
-r, --regexp-extended use extended regular expressions in the script.
檢查手冊頁sed
你的Unix機器,看看是否有一個等效選項(可能-E
)或逃脫ERE功能。
請參閱here BRE和ERE之間的差異。
sed 's/^\(.\{2\}\)0\(.*\)$/\1\2/' <filename>
有關正則表達式的更多詳細信息,或只是谷歌閱讀手冊。隨機刪除參數不太可能奏效(儘管讚美「說出你所嘗試的」)。
並非所有的seds都是相同的。 RE間隔表達式如.{2}
是現代擴展正則表達式(ERE)的一部分,而sed歷史上支持基本正則表達式(BRE)。某些機器上的一些seds根本不會支持ERE,因此您需要將表達式重寫爲BRE(..
)或切換到其他工具。一旦你開始使用這個新工具,你仍然會遇到問題,因爲「RE間隔」是ERE的一個相對新近的增加,所以即使使用支持ERE的awk工具,也不是所有的awk都支持RE間隔。有些seds通過在大括號之前放置反斜槓來支持RE間隔,有些會通過添加像-r
這樣的標誌來支持它們,以告訴sed {2}表示RE Interval而不是字面{2}。
所以,它有點混亂,但如果你有一個現代的sed然後機會添加-r標誌將爲你工作,如果你有一個POSIX awk或最近的GNU awk那麼RE間隔將簡單地工作默認。
問[在這裏 - Unix/Linux StackExchange](http://unix.stackexchange.com/)他們一定會知道的。 – ProfessionalAmateur
你想逃避那些parens /括號。您是否嘗試閱讀sed手冊? –
你不能在你的Unix系統上安裝gnu sed嗎? –