Usar URL como argumento para el comando y para el nombre del archivo de salida

Usar URL como argumento para el comando y para el nombre del archivo de salida

Estoy intentando usar XARGS o FOR en una sola línea para aceptar una lista deURLcomo argumentos, esto falla ya que un nombre de archivo no puede ser una URL. Intentamos hacer esto con FOR y XARGS, pero falla:

$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

¿Es posible eliminar las barras diagonales del argumento en la segunda aparición (nombre del archivo de salida) para obtener un archivo distintivo por host, por ejemplo:

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

Mi conocimiento sobre bash de una sola línea es bastante limitado; lamentablemente, esa es la preferencia de la empresa. Intenté usar llaves en el nombre del archivo y cambiar el valor con SED, AWK e incluso CUT, pero como dije, mi conocimiento es demasiado limitado. También probé múltiples argumentos con XARGS y FOR, pero tampoco logré que funcionara espectacularmente.

Pude evitar el problema creando archivos separados conURIen lugar deURL, y luego complementar http:// y https://, pero eso significa duplicar los archivos y duplicar los comandos, por ejemplo:

$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

Está ahícualquier¿Manera de hacer que esto funcione en un comando bash de una sola línea mientras se usa un archivo con URL? ¡gracias!

Respuesta1

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

Esto elimina la http(s)://parte principal, la creación example.site.comy secureexample.comlos archivos.

Es ${i#http*://}una construcción que elimina la $icoincidencia de la parte principal http*://( *es un comodín).


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

Éste crea archivos http.example.site.comy https.secureexample.com.

Se sedestán reemplazando ://las líneas del archivo de entrada con ..

información relacionada