このコマンドを実行しようとしています。
sed -i -e "s/BASE_64/$BASE_64/" FILE_NAME
$BASE_64
ファイル内容のBase 64表現はどこにありますか?
sed
文字列が長すぎてエラーが発生しました。
パラメータリストが長すぎます。
この間違いをどのように回避できますか?
ベストアンサー1
sed
(すでにGNU(-i
)を使用しているので)いつでもこれを行うことができます。
sed -i -f - FILE_NAME << EOF
s/BASE_64/$BASE_64/g
EOF
-f -
sed
sedスクリプトにstdinから読み込むように指示します。
Linux(Linuxのみ)の複数のファイルに対して同じスクリプトを再利用するには、次の使用シェルを次のようにzsh
実行できます。ksh
bash
dash
yash
bash
sed
find . -name '*.conf' -exec sed -i -f /dev/stdin {} + << EOF
s/BASE_64/$BASE_64/g
EOF
Linux(LinuxおよびCygwinのみ)では、次のことを/dev/stdin
意味しません。標準入力同じ方法で-
。代わりに、標準入力で開かれたファイルへのシンボリックリンクなので、sed
ファイルを開くたびに最初からファイルが再び開きます。上記のコマンドは、他のシステム()またはパイピングを介してドキュメントを実装するシェルを使用してうまく機能しますが、/dev/stdin
十分な数のconf
ファイルに対してsed
一度だけ呼び出される場合にのみ可能です。 2 回目の呼び出しでは、with などの Linux/Cygwin 以外のシステムでは、最初の呼び出しで既に-f -
読み込ま/dev/stdin
れているため、空であるように見えます。
busybox
sed
-i
sed
また、GNUと同じ方法でサポートされていますが-f -
。-f /dev/stdin
FreeBSD の場合は、次をsed
使用します。
sed -i '' -f /dev/stdin FILE_NAME << EOF
s/BASE_64/$BASE_64/g
EOF