首页 > 解决方案 > 将 url 处理到应用程序的输出中并剥离它们以创建具有 url 名称的文件

问题描述

创建了一个脚本,该脚本利用现有工具处理 url 以获取更多信息。

现在,这个工具有一个带有开关“-o”的输出格式,但是由于不可能用“output-$url-tool.txt”创建一个文件名,其中$url是一个逐行读取的列表,因此:“ http://www.something.com,(新行)https://www.something.com ”等。

是否可以在处理 url 以创建每个 url 的剥离名称“output-something.com-tool.txt”的文件时剥离 url?

这可能读起来有点模糊,但我有点迷路了,不知道有什么其他方法可以问这个问题。对不起。

请参阅下面的示例以了解我尝试过的内容,但由于文件的标记显然无法正常工作。

for url in $(cat /urls.txt); do tool -u $url -o output-$url-tool.html; done

标签: bash

解决方案


您使用的构造并不是特别安全。由于cat urls.txt被空格分割,因此文件中意外出现的任何空格都会中断您的处理。如果您确定要逐行处理,请使用read.

您还需要引用变量,并删除或修改文件名中不允许的字符。

while read -r url; do
  tool -u "$url" -o "output-${url//\//_}-tool.html"
done < urls.txt

如果你想剥离方法,你可以通过额外的参数扩展来做到这一点:

shopt -s extglob
while read -r url; do
  url="${url#http?(s)://}"
  url="${url%%/*}"
  tool -u "$url" -o "output-${url}-tool.html"
done < urls.txt

这用于extglob使sinhttps可选,并且仅包括文件名中的域名购买剥离 URL 中前面的所有内容以及整个路径。

请注意,这extglob需要 bash 版本 4 或更高版本。


推荐阅读