2016-09-22 134 views
0

我試圖用myfile替換s#_coded_block_#中的所有模式 s#_coded_block[#]。我在網上看了關於如何更換與分組圖案和我的命令是:使用sed替換模式

sed -i -E 's/s\([0-9]*\)_coded_block\[\([0-9]*\)\]/s\1_coded_block_\2/g' myfile 

不過,我對'S'

命令的RHS當越來越

無效引用\ 2我執行這個命令。

+0

你會提供你想要替換的樣本數據嗎? –

+2

刪除-E並嘗試 –

回答

1

隨着-E選項,你不要在捕獲括號之前需要反斜槓:

sed -i -E 's/s([0-9]*)_coded_block\[([0-9]*)\]/s\1_coded_block_\2/g' myfile 

您可能需要一個或更多的數字,在這種情況下,你使用+而不是*。如果您決定刪除-E,你原來的代碼應工作,但如果你想至少一個數字,你需要寫\{1,\}

sed -i 's/s\([0-9]\{1,\}\)_coded_block\[\([0-9]\{1,\}\)\]/s\1_coded_block_\2/g' myfile 

所示-i符號只與GNU sed可靠地工作。 BSD(macOS或Mac OS X)sed會將第一個命令行中的-E作爲後綴(在第二個中,您會收到關於m不是有效的sed命令的投訴,因爲該腳本將被視爲後綴,並且如果您想要便攜式代碼,請使用-i.bak,這會創建一個包含兩種變體的備份文件 - 必須附加.bak(可能需要附加)。到-i GNU sed

+0

非常感謝你,它的工作原理! – slin6174