![Использование URL-адресов в качестве аргумента для команды и имени выходного файла](https://rvso.com/image/1618727/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20URL-%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0%B2%20%D0%B2%20%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B5%20%D0%B0%D1%80%D0%B3%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%D0%B4%D0%BB%D1%8F%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B%20%D0%B8%20%D0%B8%D0%BC%D0%B5%D0%BD%D0%B8%20%D0%B2%D1%8B%D1%85%D0%BE%D0%B4%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0.png)
Я пытаюсь использовать XARGS или FOR в одной строке, чтобы принять список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
можно ли удалить косые черты из аргумента во втором вхождении (имя выходного файла), чтобы получить отдельный файл для каждого хоста, например:
http.example.site.com
https.secureexample.com
Мои познания в однострочном bash довольно ограничены, к сожалению, таковы предпочтения компании. Я пробовал использовать фигурные скобки в имени файла и менять значение с помощью SED, AWK и даже CUT, но, как я уже сказал, мои познания слишком ограничены. Я также пробовал несколько аргументов с XARGS и FOR, но мне также не удалось заставить это работать.
Мне удалось обойти эту проблему, создав отдельные файлы сURIвместоURL-адреса, а затем дополнить http:// и https://, но это означает удвоение файлов и удвоение команд, например:
$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
Естьлюбойкак заставить это работать в одной строке bash-команды, используя файл с URL-адресами? спасибо!
решение1
while read -r i;do echo "$i">"${i#http*://}";done<example.txt
Это удаляет ведущую http(s)://
часть, создавая example.site.com
и secureexample.com
файлы.
Это ${i#http*://}
конструкция, которая удаляет из $i
ведущей части соответствие http*://
( *
является подстановочным знаком).
while read -r i;do echo "$i">"$(echo "$i"|sed 's|://|.|')";done<example.txt
Этот создает файлы http.example.site.com
и https.secureexample.com
.
Заменяет строки входного файла sed
на .://
.