sedコマンドでパラメータリストが長すぎるというエラーが発生する

sedコマンドでパラメータリストが長すぎるというエラーが発生する

私は初めてシェルスクリプトとスクリプト作業に触れました。ここで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の答えは私にはうまくいきませんでした。一致後にファイルを挿入してから一致を削除する必要がありました)

おすすめ記事