ファイル内の行を一致させた後、複数の行(逐語的bash変数として指定)を追加しますか?

ファイル内の行を一致させた後、複数の行(逐語的bash変数として指定)を追加しますか?

bashスクリプトのテキストファイルで、一致する行の後に複数の行を追加したいと思います。この作業のためにどのツールを選択するかは特に気にしませんが、私にとって重要なのは、スクリプトに「現状のまま」追加される行を指定したいということです。したがって、その行を保持する追加のファイルを生成する必要はありません。 ) Bash変数で終わり、その中に何も引用/エスケープする必要はありません。 「引用された」heredocを使用することは私にとって効果的でした。例は次のとおりですappendtest.sh

cat > mytestfile.txt <<'EOF'
    "'iceberg'"
    "'ice cliff'"
    "'ice field'"
    "'inlet'"
    "'island'"
    "'islet'"
    "'isthmus'"
EOF

IFS='' read -r -d '' REPLACER <<'EOF'
      "'$oasis$'"
      "'$ocean$'"
      "'$oceanic trench$'"
EOF

echo "$REPLACER"

sed -i "/    \"'ice field'\"/a${REPLACER}" mytestfile.txt

残念ながら、これは機能しません。

$ bash appendtest.sh
      "'$oasis$'"
      "'$ocean$'"
      "'$oceanic trench$'"
sed: -e expression #1, char 39: unknown command: `"'

...sedエスケープされていない複数行置換を使用すると失敗するためです。だから私の質問は次のようになります

  • sedテキスト行で一致を実行し、$REPLACERBash変数(例)で指定されているように行を挿入/追加する代わりに、何を使用できますか?

ベストアンサー1

GNU を使用する場合、sed最良のオプションは次のrコマンドを使用することです。

sed -i "/    \"'ice field'\"/ r /dev/stdin" mytestfile.txt <<'EOF'
      "'$oasis$'"
      "'$ocean$'"
      "'$oceanic trench$'"
EOF

おすすめ記事