2011-10-12 45 views
0

我正在使用OSX,並且在嘗試使用sed命令替換文件中的字符串時遇到問題。問題是替代字符串包含一個方括號。 特別是我想用這個「message ------ [yea]」SED幫助:如何用另一個字符串替換包含方括號的字符串

替換這個字符串「message --------------」( - 是空格)

但如果我鍵入

sed "message    /s//message  \ [ yea ]" filein > fileout 

我得到這個消息:在替代命令不良標識:「[」

我試圖把\前,[但沒有奏效。誰能幫忙?謝謝!

+0

你sed的命令格式不正確,但我得到一個不同的錯誤消息「無效的命令代碼m」 –

回答

0

不準確計數空白:

echo "message   foo" | sed "s/message  /message [ yea ]/" 

消息[酵母] FOO

的替代命令是 'S/IN/OUT /',而「米... '是未知的 - 不知道m命令。另一個成功的關鍵是,屏蔽單個字符[立即,在兩者之間沒有空白,用反斜槓。但是 - 在替代表達式的右側,一個組合沒有太大意義,所以你不需要掩飾它們。

+0

在正文中檢查我所做的編輯是否符合您的意圖對不起,如果我不清楚 –

+0

是的,我明白瞭如果你看到一個錯字,如果不清楚它是否是故意提出的,我將刪除我的第一條評論爲「討論」關於噪音'現在。 –

1

嘗試這種情況:

sed 's/message /&[ yea ]/g' filein > fileout 

&是匹配的表達式。託槽不需要特殊處理。

我不太清楚這些空間是如何處理的。以上只是將[ yea ]添加到固定長度空間序列的末尾。它應該被優選用[ yea ]取代的空間的任意長度的序列的最後一個空間,需要更復雜的命令:

sed 's/\(message \{1,\}\)  /\1[ yea ]/g' filein > fileout 

在這種情況下這樣做是爲了匹配有兩個部分的圖案。首先是一組,由\(\)括號,看起來爲message後跟一個或多個空格(\{1,\}。這必須緊跟整整7位。如果匹配的文本被發現,它是由組的文本(\1取代,表明第一組),其次是[ yea ],這裏的策略可以適用於其他搜索替換的模式,與例如,多個組或不同的文字。

+0

謝謝!事實上,這是第二起案件,空白不得不被替代。無論如何,它的工作。 但是現在我又面臨另一個挑戰......我必須用斜線替換字符串中的最後9個空格「/ [yea]」!有任何想法嗎? – user991269

+0

我已經擴展瞭解釋,希望能讓你更好地概括命令。對於您的修改,您只需要將空格字符串擴展爲9長,並將替換文本擴展爲'\\ [yea]'。 –

+0

順便說一句,因爲你是一個新用戶,所以有一些技巧。在Stack Overflow上,有人說通過提升和/或接受答案表示感謝。同樣,最好通過編輯問題來修改或澄清問題,而不是在評論中。但不要過度改變一個問題:Stack Overflow是一個問答網站,而不是論壇。 –

相關問題