私の最初の問題は、構成ファイルの特定のブロックの最後に行を追加できることでした。
############
# MY BLOCK #
############
VALUE1 = XXXXX
VALUE2 = YYYYY
MYNEWVALUE = XXXXX <<< I want to add this one
##############
# MY BLOCK 2 #
##############
これを行うために、次の sed スクリプトを使用しましたが、問題なく動作します (別の投稿で見つかりました)。
sed -i -e "/# MY BLOCK #/{:a;n;/^$/!ba;i\MYNEWVALUE = XXXXX" -e '}' myfile
これは、シェルスクリプト内で実行すると完全に機能しましたが、対話型シェルで直接使用することはできません (「!ba イベントが見つかりません」というエラーが発生しました)。これを解決するために、「!ba」の前に「\」を追加しようとしましたが、「\」が不明なコマンドであることを示す別のエラーが表示されました。
上記の問題のどこに私の間違いがあり、このスクリプトがどのように機能するかを誰か説明してもらえますか?
ここに私の理解があります:
-i : insert new line (i think the first one is useless, am i right?)
-e : execute this sed script (don't understand why there is a second one at the end to close the })
:a : begin a loop
n : read each line with the pattern ^$ (empty lines)
! : reverse the loop
ba : end of the loop
ありがとう !