私は初めてシェルスクリプトとスクリプト作業に触れました。ここでhtmlレポートを生成し、このhtmlレポートの内容を送信されたjsonリクエストに追加する必要があります。次に、その要求を使用してAPIを呼び出します。
テンプレートとしてJsonリクエストがあり、テンプレートには、Base64を使用してエンコードした後に生成されたHTMLコンテンツを置き換える必要があるCONTENTというプレースホルダがあります。
AWKとsedを使用してテンプレートにエンコードされた文字列を追加しようとすると、Argument list is too longエラーが発生します。私が生成したHTMLファイルには40K行があるからです。
次の方法を使用すると、同じエラーが発生しました。
encStr="$(cat ./myreport.html | base64)"
#AWK-Approach
awk -v var="$encStr" '{gsub("CONTENT", var, $0); print}' /path/totemplate > output.tmp
#SED-Approach
sed -i "s|CONTENT|$encStr|" output.tmp
sedをedに変更し、コマンドを別のファイルに入れることをお勧めします。 ~によるとhttps://unix.stackexchange.com/a/284188/149867ただし、別の.shファイルを作成して現在のスクリプトに含めると機能しません。これは他の方法の詳細な例です。
ベストアンサー1
CONTENT
独自の行にある場合は、代替エントリをファイルに入れて使用tmp
してください。
sed -e '/CONTENT/r tmp' -e '/CONTENT/d' inp
tmp
まず、一致する部分の後にファイルの内容を挿入し、その行を削除します。CONTENT
(コメントにある@philipposの答えは私にはうまくいきませんでした。一致後にファイルを挿入してから一致を削除する必要がありました)