Verwenden von URLs als Argument für Befehle und für den Ausgabedateinamen

Verwenden von URLs als Argument für Befehle und für den Ausgabedateinamen

Ich versuche, entweder XARGS oder FOR in einer einzigen Zeile zu verwenden, um eine Liste vonURLsals Argumente schlägt dies fehl, da ein Dateiname keine URL sein kann. Wir haben versucht, dies mit FOR und XARGS zu tun, aber es schlägt fehl:

$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

ist es möglich, die Schrägstriche aus dem Argument beim zweiten Vorkommen (Name der Ausgabedatei) zu entfernen, sodass ich für jeden Host eine eindeutige Datei erhalte, zum Beispiel:

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

Meine Kenntnisse in einzeiliger Bash sind leider ziemlich begrenzt, das ist die Präferenz des Unternehmens. Ich habe versucht, geschweifte Klammern im Dateinamen zu verwenden und den Wert mit SED, AWK und sogar CUT zu ändern, aber wie gesagt, meine Kenntnisse sind zu begrenzt. Ich habe auch mehrere Argumente mit XARGS und FOR ausprobiert, aber auch das hat bei mir kläglich versagt.

Ich konnte das Problem umgehen, indem ich separate Dateien erstellte mitURIsanstattURLs, und ergänzen Sie dann http:// und https://, das bedeutet aber die doppelte Anzahl an Dateien und die doppelte Anzahl an Befehlen, Beispiel:

$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

Ist dabeliebigwie lässt sich das mit einem einzeiligen Bash-Befehl bewerkstelligen, während eine Datei mit URLs verwendet wird? Danke!

Antwort1

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

Dadurch werden der führende http(s)://Teil sowie die Erstellungs- example.site.comund secureexample.comDateielemente entfernt.

Dies ${i#http*://}ist eine Konstruktion, die aus $idem führenden Teil die Übereinstimmung entfernt http*://( *ist ein Platzhalter).


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

Dieses erstellt Dateien http.example.site.comund https.secureexample.com.

Das sedErsetzen ://der Eingabedateizeilen durch ..

verwandte Informationen