bash - 将 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
解决方案
您使用的构造并不是特别安全。由于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
使s
inhttps
可选,并且仅包括文件名中的域名购买剥离 URL 中前面的所有内容以及整个路径。
请注意,这extglob
需要 bash 版本 4 或更高版本。
推荐阅读
- ios - 如何从我的应用程序中打开设置页面
- java - 为什么无法在jsp中显示两个输入
- visual-studio-code - Visual Studio Code,内联文件夹
- ios - 在 iOS 中使用 FFMPEG 进行流式传输时如何获取相机预览?
- grafana - 加载面板插件 TypeError 时出错:r.PanelPlugin 不是构造函数(Grafana)
- c# - 如何从命令提示符执行 Specflow 中的所有功能文件?以及如何执行多个特征文件(即 2 个特征文件)?
- mysql - mysqldump 不保留视图格式/结构
- java - 如何在文件中的行之间移动?
- javascript - html:创建与缺少必填字段时相同的弹出框
- php - 如何在 WooCommerce 中突出显示可变产品页面上的变体表单字段?