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.com
y secureexample.com
los archivos.
Es ${i#http*://}
una construcción que elimina la $i
coincidencia 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.com
y https.secureexample.com
.
Se sed
están reemplazando ://
las líneas del archivo de entrada con .
.