我試圖在屬性文件中替換一行文本。 例如:Bash - sed替換文本
food.type=banana
隨着這行代碼我可以取代香蕉完全與另一輸入的輸入。
FOOD=apple
sed "s/food.type=.*/food.type=$FOOD/"
輸出:
food.type=apple
然而,當我試圖替換文本的前行中有一個/
,我不能得到更換工作。 例如:
food.type=/yellow/banana
任何幫助,非常感謝。謝謝!
我試圖在屬性文件中替換一行文本。 例如:Bash - sed替換文本
food.type=banana
隨着這行代碼我可以取代香蕉完全與另一輸入的輸入。
FOOD=apple
sed "s/food.type=.*/food.type=$FOOD/"
輸出:
food.type=apple
然而,當我試圖替換文本的前行中有一個/
,我不能得到更換工作。 例如:
food.type=/yellow/banana
任何幫助,非常感謝。謝謝!
的斜線被解讀爲關閉REG-EX匹配/替代模式,
做
sed "[email protected]=.*@[email protected]"
一些SEDS需要你逃避非標準分隔符的第一個實例,即
sed "s\@food.type=.*@[email protected]"
我希望這有助於。
另一種選擇是繼續使用/
作爲sed的分隔符,並在替換字符串中轉義任何斜槓。 bash中能做到這一點(雖然這是一個,但神祕的):
sed "s/food.type=.*/food.type=${FOOD//\//\/}/"
該變量代換是相當神祕,所以讓我打破它由一塊解釋件:
${FOOD
啓動食品
的變量替換 //
更換的
\/
字符/
(注意,必須在這方面進行轉義)
/
所有出現...
\/
替換字符串\/
(注意,這裏的逃逸作爲替換字符串的一部分,僅僅是處理)替代
的
}
末但是,這並不完全是完美的,因爲有可能引起麻煩的幾個其他字符如果它們出現在替換字符串中。要真正防彈這一點,你可以做的幾種替代在bash(亂),或農場的工作出來sed
:
ESCAPEDFOOD="$(printf "%s" "$FOOD" | sed 's/[\/&]/\\&/g')"
sed "s/food.type=.*/food.type=$ESCFOOD/"
再次,替代變得有點神祕,所以這裏有一個細目:
s/
更換模式
[\/&]
任何字符\
,/
的,或&
/
與...
\\&
替換字符串\
(這裏逃脫了),再加上原有的比賽
/g
...全局(即全部替換)
(是的,我知道用sed
來準備的諷刺字符串,與sed
一起使用。)
請注意,這可能是我錯過了一些麻煩的字符;如果是這樣,他們可以被添加到[]
表達式中。
您必須用\ /或使用不同的分隔符來跳過斜線。 –