使用 URL 作为命令和输出文件名的参数

使用 URL 作为命令和输出文件名的参数

我尝试在一行中使用 XARGS 或 FOR 来接受以下列表网址作为参数,这会失败,因为文件名不能是 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代替网址,然后补充 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

有没有任何如何在使用带有 URL 的文件时通过单行 bash 命令完成此操作?谢谢!

答案1

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

这将删除前导http(s)://部分,并创建example.site.comsecureexample.com文件。

是一个从前导部分${i#http*://}中删除匹配项的构造(是一个通配符)。$ihttp*://*


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

这将创建文件http.example.site.comhttps.secureexample.com

sed替换://输入文件的行.

相关内容