2009-04-21 163 views
3

我正在編寫一個shell腳本來編輯 aegis的Change-Set屬性。該 命令我使用的是:開闢了一個vi編輯器在shell腳本中使用變量sed

aegis -Change_Attributes -Edit 

進行 了變化。我想做一個搜索 和替換:

s/brief_description \= \"none\"\;/brief_description \= 

\「測試\」/g的

我可以通過這些直接通過腳本打開 VI實例,而不 打字它的任何?我想在編輯它之後保存 文檔(:wq)。

P.S.該文件是在執行命令時使 我不知道原來的路徑

編輯創建的臨時文件 :我用過可以的sed在這種情況下:

sed -e 's/brief_description\ \=\ \"none\"\;/brief_description\ \=\ 

\「測試\「\;/G」

溶液(不雅劈??)將 是 」貓「 由主持 輸出(SETENV VISU AL貓),修改了 放流與上面的命令和 保存到臨時文件,並使用:

aegis -change_attributes -file <temp file> 

EDIT2:我幾乎得到它的工作。但是,有一個與我使用sed

我有我的腳本中的以下行的方式有問題:

sed -i 's/brief_description\ \=\ \"none\"\;/brief_description\ \=\ \"${DESC}\"\;/g' temp_next.txt 

但是$ DESC變量不評價它的價值和出把給定爲:

brief_description =「$ {DESC}」;

如何將DESC傳遞給sed以評估其實際值?

EDIT3:

使用

sed -i 's%brief_description\ \=\ \"none\"\;%brief_description\ \=\ \"'"$DESC"'\"\;%g' temp_next.txt 

工作。我用%替換正常的分隔符(/),並將環境變量放在雙引號中。

回答

5

你不需要知道路徑 - aegis應用程序將提供該路徑。您需要更改環境變量,該變量指定編輯器指定用於指向腳本的編輯器,並在該腳本中使用sed流編輯器執行編輯。

編輯:關於您的變量名稱擴展問題,將包含整個sed替換表達式的單引號集更改爲雙引號。變量替換由單引號關閉。

+0

如果我用貓與SED修改輸出,就會將更改保存到文件? – Gayan 2009-04-21 11:01:26

+0

不,您必須將sed的輸出重定向到某處,在這種情況下,請將其重定向到臨時文件。然後,編輯完成後,刪除原始文件並重命名臨時文件。 – 2009-04-21 11:03:21

0

我不認爲香草vi會這樣做,儘管vim可能能夠在自定義.vimrc的控制下完成此操作。更好的方法是用sed進行更改,然後在結果上打開vi。

2

如果您通過-c選項傳遞了所需的命令,則vi將在開始編輯會話後立即執行命令,例如,

vi -c 's/brief_description \= \"none\"\;/brief_description \= \"test\"/g' my_file 

糟糕。我忘了說這個命令被解釋爲一個「ex」命令,即在冒號,所以你提供的命令應該可以工作。

HTH

歡呼聲,