sed内のサブシェル

sed内のサブシェル

ファイルの先頭にこれを追加できます。

sed -i '1s/^/word\n/' file

はい読む二重引用符を使用すると変数を拡張できるため、次のことを試してください。

sed -i "1s/^/$(printenv)\n/" file

私は最終的に戻った:

sed: -e expression #1, char 15: unterminated `s' command

どうしたの?変数の内容やその他に関連していますか?

答え1

私は次のことがうまくいくと思います。

sed -i '1 e printenv' file

GNU sedマニュアルから:

'e COMMAND'
     Executes COMMAND and sends its output to the output stream.  The
     command can run across multiple lines, all but the last ending with
     a back-slash.

または を使用できますが、catこれを行うには一時ファイルを作成する必要があります。

cat <(printenv) file > temporary_file; mv temporary_file file

パッケージがコンピュータにインストールされている場合は、moreutils次のコマンドを使用して一時ファイルを手動で作成するのを防ぎますsponge

cat <(printenv) file | sponge file

答え2

コンテンツの挿入今後ライン1:

ed -s file <<< $'0r !printenv\nwq'

コンテンツの挿入後ろにライン1:

ed -s file <<< $'1r !printenv\nwq'

答え3

OPの質問に直接答えるには、はい、サブシェルが出力することに関連しています。 Bashが認識し、二重引用符内に意味を維持する特殊文字は、シェルで誤って解釈され、printenv多くの問題を引き起こす可能性があります。このエラーの最も可能性の高い原因unterminated 's'は、値がprintenv複数行の長さであり、sedsコマンドがその行の終わりに完了すると予想されるためです。このコマンドで置き換えるには、特殊文字を削除したり、エスケープしてリテラルを置き換えるなどのsed操作を前処理する必要があります。newlines\n

関連情報