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
テキスト行で一致を実行し、$REPLACER
Bash変数(例)で指定されているように行を挿入/追加する代わりに、何を使用できますか?
ベストアンサー1
GNU を使用する場合、sed
最良のオプションは次のr
コマンドを使用することです。
sed -i "/ \"'ice field'\"/ r /dev/stdin" mytestfile.txt <<'EOF'
"'$oasis$'"
"'$ocean$'"
"'$oceanic trench$'"
EOF