次のコマンド:
jq ".[] | .file.url_private_download" *json
次の形式の複数行を生成します。
"https://files.slack.com/files-pri/T27SFGS2W-F78LH1DN2/download/img_1964.jpg?t=xoxe-243624297126-248125875671-248125975751-cee1f8d9a1"
各行の前にwgetコマンドを追加する最も簡単な方法は何ですか?
非常にありがとう
答え1
以下はいくつか修正したコマンドです。
jq -r '.[] | @sh "wget \(.file.url_private_download)"' *json
多様性:
-r
JSONエンコード文字列の代わりに、デコードされた文字列を出力に取得するために使用されます。文書の値を文字列に挿入する
wget
ために使用される構造体で、目的の値が続く文字列を生成します。\(...)
@sh
シェル生成文字列を正しく引用するために使用されます。これにより、各文字列の補間値がシェルで使用するために安全に引用されます。
上記のコマンドを使用すると、表示されたURLを含むエントリが次の行を出力として生成すると予想されます。
wget 'https://files.slack.com/files-pri/T27SFGS2W-F78LH1DN2/download/img_1964.jpg?t=xoxe-243624297126-248125875671-248125975751-cee1f8d9a1'
答え2
xargs
以下を使用して、各行の前に必要なコマンドを追加できます。
jq ".[] | .file.url_private_download" *json | xargs -n1 /bin/echo "wget"
答え3
これを使用してsed
各行の先頭を書き換えることができます。
jq ".[] | .file.url_private_download" *json | sed 's/^/wget /'
ここでは、行の先頭をランダムな代替パターンに「置換」します。wget
またはwget
すべてのファイル:
jq ".[] | .file.url_private_download" *json | wget -i -