0

行のタイプを変更しようとしています

DIRLIST="DIR/1 DIR/2 DIR/3"

DIR/4がコマンドライン引数であるbashスクリプトを使用して、新しいDIR/4を含める

現時点では、これは私の置き換え用のコードです

sed "#DIRLIST#s#$# $logFolder\"#g" compress_log.sh > tmpCompress

これにより、DIRLIST を含むすべての行で $ が logFolder の内容に置き換えられ、tmpCompress にリダイレクトされるはずです。

私が直面している問題は、スラッシュや引用符などが原因だと思います。

どんな助けでも大歓迎です

4

4 に答える 4

3

以下の行が機能します。これ

  • DIRLIST を持つすべての行を検索します
  • 行末の " を ... に変更します。
  • 「$logFolder」に続いて...
  • キャラクター

    sed '/DIRLIST/ s:"$:'"$logFolder"'":'

分解した方が分かりやすいかもしれませんが、

sed '/DIRLIST/ s:"$:'            "$logFolder"             '":'

1 行で 2 種類の引用符を使用できること、および引用符の目的は特殊文字の解釈を防ぐことであることに注意してください。最初の部分では、二重引用符とドル記号の両方を引用したいので、単一引用符を使用します。2 番目の部分は二重引用符で囲んで、$ が変数として解釈されるようにし、変数の値に特殊文字が含まれている場合 (コロンを含まない場合) に備えます。3 番目の部分では、一重引用符を使用して二重引用符とコロン (s:old:new:パターンの最後のコロン) を囲みます。

習慣により、sed スクリプトでは「...」ではなく「..」を使用することを好みます。より安全です。

于 2013-05-23T16:37:43.527 に答える
1

以下も同様に機能します

old_folder='DIR[/]1 DIR[/]2 DIR[/]3'
sed "/""${old_folder}""/"' s#$# '"$logFolder"'#'
于 2013-05-23T16:49:36.387 に答える
1

#DIRLIST#パターンに一致するかどうかはわかりませんが、一致/DIRLIST/します。

$ export logFolder=NEWDIR
$ echo 'DIRLIST="DIR/1 DIR/2 DIR/3"' | sed "/DIRLIST/ s#\"\$# $logFolder\"#g"
DIRLIST="DIR/1 DIR/2 DIR/3 NEWDIR"
于 2013-05-23T12:15:58.227 に答える