我有一个 file.txt,其中包含一些网址和网络名称。就像是:
WEB1: www.url.com
WEB2: www.url2.com
(名称中没有空格,冒号后面有一个空格)我希望能够在 Firefox 中为该文件中的特定网站打开一个选项卡。我尝试过这样的事情:
xargs -a file.txt firefox -new-tab "$line"
这会将文档中的每个单词作为新选项卡打开。我希望能够使用网络名称选择要打开的网址。我一次会打开一个网址。该文件的长度约为 100 行左右。有什么简单的方法可以做到这一点吗?谢谢!
正如 Bodo 所建议的,这里有一些细节:
urls.txt
您的目录中有一个文件HOME
,其中包含问题中所示的行。- 键和 URL 由冒号和空格 (
:
) 分隔。 - 您想要运行一个命令,
openurl foo bar baz
其中,是文件中的键,例如,且不带尾随冒号 ( )。foo
bar
baz
WEB1
WEB2
:
答案1
您可以使用awk
和xargs
:
awk -F ': ' '$1 == "WEB2" {print $2}' file.txt | xargs -I{} firefox -new-tab {}
-F ': '
让我们awk
用冒号后跟空格分隔字段。此序列不应出现在 url 中。
答案2
答案基于问题中定义的要求。
您可以创建一个名为的 shell 脚本openurl
:
#! /bin/sh
for i in "$@"
do
grep "^$i": "$HOME"/urls.txt
done | sed 's/.*: //' | while read url
do
firefox -new-tab "$url"
done
当您运行它时openurl WEB1
,它应该打开www.url.com
,当您运行它时,openurl WEB1 WEB2
它应该打开示例中的两个 URL。
文件中不存在的键将被忽略。这意味着egopenurl WEB1 WEB3
将打开www.url.com
并且不执行任何操作WEB3
。
当然你也可以创建一个函数openurl
来代替shell脚本。
如果包含 URL 表的文件非常大(远超过 1000 行),或者如果您想要指定许多 URL 键(远超过 10),则简单的方法可能会变慢。在这种情况下,最好使用不同的方法一次从文件中提取所有匹配的行,而不是grep
为每个命令行参数运行多次。
如何以选项卡形式打开 URL 的部分复制自阿乔姆·S·塔什基诺夫的回答。
答案3
awk '{print $2}' file.txt | grep -v ": " | while read url; do firefox -new-tab "$url"; done
添加是| grep -v ": "
因为 OP 指出" 是文件中的键,如 WEB1、WEB2,不带尾随冒号 (:)。"