有没有办法从文本文件中通过bash获取“随机匹配”字符串?
我目前正在通过bash,curl& amp获取下载链接来自在线文本文件的grep。
示例:
DOWNLOADSTRING="$(curl -o - "http://example.com/folder/downloadlinks.txt" | grep "$VARIABLE")"
来自在线文本文件,其中包含
http://alphaserver.com/files/apple.zip
http://alphaserver.com/files/banana.zip
其中$ VARIABLE是用户选择的内容。
效果很好,但我想在文本文件中添加一些镜像。
因此,当选择变量'banana'时,我grep包含的文本文件:
http://alphaserver.com/files/apple.zip
http://betaserver.com/files/apple.zip
http://gammaserver.com/files/apple.zip
http://deltaserver.com/files/apple.zip
http://alphaserver.com/files/banana.zip
http://betaserver.com/files/banana.zip
http://gammaserver.com/files/banana.zip
http://deltaserver.com/files/banana.zip
代码应该选择一个随机的'banana'字符串并将其存储为'DOWNLOADSTRING'变量。 上面的当前代码只能在文本文件中使用1个字符串,因为它会抓取所有“香蕉”。
这是为了什么;我想为在线文本文件中的文件添加一些镜像下载链接,并且当前代码不允许这样做。
我可以让grep抓住一个随机的'香蕉'字符串吗? (而不是全部)
答案 0 :(得分:2)
请参阅此问题,了解如何在grep之后获取随机行。 rl
似乎是一个很好的候选人
What's an easy way to read random line from a file in Unix command line?
然后执行grep ... | rl | head -n 1
答案 1 :(得分:2)
试试这个:
DOWNLOADSTRING="$(curl -o - "http://example.com/folder/downloadlinks.txt" | grep "$VARIABLE")" |
sort -R | head -1
输出将被随机排序,然后将选择第一行。
答案 2 :(得分:0)
如果mirrors.txt
具有您在问题中提供的以下数据:
http://alphaserver.com/files/apple.zip
http://betaserver.com/files/apple.zip
http://gammaserver.com/files/apple.zip
http://deltaserver.com/files/apple.zip
http://alphaserver.com/files/banana.zip
http://betaserver.com/files/banana.zip
http://gammaserver.com/files/banana.zip
http://deltaserver.com/files/banana.zip
然后,您可以使用以下命令从文件中获取随机的“匹配字符串” :
grep -E "${VARIABLE}" mirrors.txt | shuf -n1
然后,您可以使用函数调用将其值设置为变量DOWNLOADSTRING
,如下所示:
rand_mirror_call() { grep -E "${1}" mirrors.txt | shuf -n1; }
DOWNLOADSTRING="$(rand_mirror_call ${VARIABLE})"
这将根据您的${VARIABLE}
输入,为您提供文本文件中的专用随机行。用这种方式打字要少得多。