2013-07-08 53 views
0

我正在使用sed用於帶有腳本的自動安裝程序。我想最後一個引號前加一個字,規則是:在最後一次出現雙引號之前添加一個詞

  • 必須有因變量在第一個參數雙引號
  • 最後一個引號之前的話是未知
  • 我更喜歡一個解決方案sed命令

文件:

values="word anotherword anyword foo" 

腳本:

#!/bin/sh 
wordtoadd="bar"; 
sed -i "s/^values=\(*.\)\"/\1$wordtoadd\"/" filetomodify.txt; 

期望的結果:

values="word anotherword anyword foo bar" 

回答

1

方式一:

sed '/^values=/s/\([^"]*\)"$/\1 '"$wordtoadd"'"/' input 

其中,如果發現開始values=一條線,取代了一系列非引號字符的最長匹配( [^"]),後面跟着一個報價和行尾("$),匹配項和wordtoend,也放回報價(\1 '"$wordtoadd"'")。

在你的sed表達,\(*.\)應該\(.*\)量化.。在替換時,您還應該放回value=部分。

+0

TY,我解決您的建議:)我的sed命令,效果很好,可以更好地解釋你的命令語法?專($和[^ 「] *)。 – Lyoneel

+1

@Lyoneel,補充說明一下。 – perreal

0

這可能會爲你工作(GNU SED):

sed -r 's/(.*)"/\1'"$wordtoadd"'"/' file 
相關問題