bash grep'随机匹配'字符串

时间:2011-06-16 17:13:00

标签: bash random grep

有没有办法从文本文件中通过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抓住一个随机的'香蕉'字符串吗? (而不是全部)

3 个答案:

答案 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}输入,为您提供文本文件中的专用随机行。用这种方式打字要少得多。