3

aegisのChange-Set属性を編集するためのシェルスクリプトを書いています。私が使用しているコマンドは次のとおりです。

aegis -Change_Attributes -Edit

これにより、変更を実行するためのviエディターが開きます。検索して置き換えたい:

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

\ "test \" / g

スクリプトを入力せずに、スクリプトを介してこれらをオープンviインスタンスに直接渡すことはできますか?編集後、ドキュメント(:wq)を保存したい。

PSファイルはコマンド実行時に作成される一時ファイルなので、元のパスがわかりません

編集:この場合、sedを使用できます:

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

\ "test \" \; / g '

解決策(不正なハック??)は、aegis(setenv VISUAL cat)からの出力を「cat」し、上記のコマンドで出力ストリームを変更して一時ファイルに保存し、次を使用することです。

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

働いた。通常の区切り文字(/)を%に置き換え、環境変数を二重引用符で囲みます。

4

3 に答える 3

5

パスを知る必要はありません-aegisアプリがそれを提供します。aegisがスクリプトを指すために使用するエディターを指定する環境変数を変更する必要があります。そのスクリプトでは、sedストリームエディターを使用して編集を実行します。

編集:変数名の展開の問題に関して、sed置換式全体を囲む一重引用符のセットを二重引用符に変更します。変数の置換は一重引用符でオフになります。

于 2009-04-21T10:51:25.137 に答える
2

-c オプションを介して目的のコマンドを渡すと、vi は編集セッションの開始直後にコマンドを実行します。

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

おっとっと。コマンドが「ex」コマンド、つまりコロンで解釈されることを忘れていたので、提供したコマンドは機能するはずです。

HTH

乾杯、

于 2009-04-21T11:12:51.260 に答える
0

私はバニラviがこれを行うとは思いませんが、vimはカスタム.vimrcの制御下でこれを行うことができるかもしれません。より良い方法は、sedで変更を行い、結果に対してviを開くことです。

于 2009-04-21T10:51:26.600 に答える