ファイルの末尾に追加するには、「sed」を使用します。

ファイルの末尾に追加するには、「sed」を使用します。

私は現在sedfromを使用しています。呼び出すユーザーがファイルに書き込む権限がない bash スクリプトの制限を回避するために、stdinこのスクリプトを使用しています。sedecho "..." >> outputfile.conf

これは私の目的です。書くファイルとして:

echo "<VirtualHost *:80>
    ...
</VirtualHost>" | sudo sed -n "w/etc/apache2/sites-available/000-default.conf"

次は何をすべきですか?追加同じファイルに?

if $enable_ssl; then
    echo "<VirtualHost *:443>
        ...
    </VirtualHost>" | sudo sed <opions-to-sed-here>
fi

答え1

>より高い権限または異なる権限を持つシェルの一般的な代替方法は次のとおりです。

echo "replace file content with this line" | sudo tee protectedFile >/dev/null

追加するには、以下を使用します-a

echo "append this line to file" | sudo tee -a protectedFile >/dev/null

答え2

いいえecho:

string=$'"<VirtualHost *:443> \
        ... \
    </VirtualHost>"'

sudo sed -i '$a\'"${string}"'' file

この-iオプションは、sedファイルがその場所で処理されるように指示します(オプションで元のバージョンにサフィックスを追加します)。

sedスクリプト:

  1. $最後の行の一致
  2. a\一致する行の後にテキストを追加する

ただし、空のファイルでは機能しません(最後の行に一致する入力行がないため)。

答え3

完全性のために、ed次の事項があります。

echo "$
a
<VirtualHost *:80>
...
</VirtualHost>
.
w" | sudo ed protectedFile
  1. $最後の行に移動
  2. a追加してから追加するデータを入力し、単一の点を含む行で終わります。
  3. w代表する書く(ファイル)

最初の2つのコマンドは接続(作成$a)できますが、空のファイルでは機能しません。単独では動作します。「最後の行に移動」(無作為)「追加の」代わりに「最後の行に追加」、実際には存在しません。

関連情報