コマンドおよび出力ファイル名の引数として URL を使用する

コマンドおよび出力ファイル名の引数として URL を使用する

私はXARGSまたはFORを1行で使用して、リストを受け入れようとしています。URL引数として、ファイル名は URL にはできないため、これは失敗します。FOR と XARGS を使用してこれを実行しようとしましたが、失敗しました。

$for i in $(cat example.txt);do echo $i > $i; done
bash: http://example.site.com: No such file or directory
bash: https://secureexample.com: No such file or directory

$cat example.txt | xargs -I {} sh -c "echo  {} > {}"
sh: 1: cannot create http://example.site.com: Directory nonexistent
sh: 1: cannot create https://secureexample.com: Directory nonexistent

2 回目の引数 (出力ファイル名) からスラッシュを削除して、ホストごとに異なるファイルを取得することは可能ですか? たとえば、次のようになります。

http.example.site.com
https.secureexample.com

残念ながら、シングル ライン bash に関する私の知識はかなり限られています。それが会社の好みなのです。ファイル名に中括弧を使用して、SED、AWK、さらには CUT で値を変更してみましたが、前述したように私の知識は限られています。また、XARGS と FOR で複数の引数を試してみましたが、これも見事に失敗しました。

私は別のファイルを作成することでこの問題を回避することができました。URIの代わりにURL、そして http:// と https:// を追加しますが、これはファイルとコマンドが 2 倍になることを意味します。例:

$cat http_example.txt
example.site.com
secureexample.com 
$cat http_example.txt | xargs -I {} sh -c "echo  http://{} > {}"
$ls -la
-rw-r--r-- 1 root root   24 Mar 22 08:06 example.site.com
-rw-r--r-- 1 root root   25 Mar 22 08:06 secureexample.com

ありますかどれでもURL を含むファイルを使用しながら、これを 1 行の bash コマンドで動作させる方法はありますか? ありがとうございます!

答え1

while read -r i;do echo "$i">"${i#http*://}";done<example.txt

これにより、先頭http(s)://部分が削除され、ファイルexample.site.comが作成されますsecureexample.com

は、先頭部分から一致する(はワイルドカード)${i#http*://}を削除する構造です。$ihttp*://*


while read -r i;do echo "$i">"$(echo "$i"|sed 's|://|.|')";done<example.txt

これはファイルhttp.example.site.comとを作成しますhttps.secureexample.com

は入力ファイルの行を にsed置き換えます。://.

関連情報