私のプロジェクト.sh
ファイルに次のコマンドを書きました。
var1=`sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/\\n/g;s/^/"/g;s/$/"/g' ${var}`
sed -i "s/%PQR%/$var1/g" file2
var
更新したいファイルの場所を保存する変数です。ファイルの先頭と末尾に二重引用符を追加したいと思います。また、すべての新しい行を\n
。
To err is to human.
This is life.
出力:
"To err is to human.\nThis is life."
次に%PQR%
infile2
をvar1
。
ただし、パイプラインを実行すると、タイトルに記載されているように2番目のコマンドでエラーが発生します。
sed: -e expression#1 char 48: unterminated `s' command
答え1
ファイルの内容をjson文字列にエンコードするには、次のようにします。
json=$(jq --slurp -R < "$file")
または:
json=$(jq --slurp -R 'rtrimstr("\n")' < "$file")
最後の行を区切る改行文字を切り捨てます。
そして、特定のプレースホルダをランダムなデータに置き換えることははるかに使いやすいですperl
(-i
いくつかのsed
実装でサポートされているオプションは実際にインスピレーションを受けましたperl
)。
PLACEHOLDER='%PQR%' REPLACEMENT="$json" perl -pi -e '
s/\Q$ENV{PLACEHOLDER}\E/$ENV{REPLACEMENT}/g' -- "$other_file"
sed
しかし可能です一部の文字をエスケープする必要があります。。