bash grep'随机匹配'字符串

问题描述:

有没有办法通过bash从文本文件中抓取'随机匹配'字符串?bash grep'随机匹配'字符串

我目前正在通过bash抓取一个下载链接,从在线文本文件卷曲& grep。

例子:

DOWNLOADSTRING="$(curl -o - "http://example.com/folder/downloadlinks.txt" | grep "$VARIABLE")" 

从包含

http://alphaserver.com/files/apple.zip 
http://alphaserver.com/files/banana.zip 

其中$变量是一些用户选择在线的文本文件。

工程很好,但我想添加一些镜像文本文件。

所以当变量“香蕉”被选择,这是我用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 

的代码应该选择一个随机的“香蕉”字符串,并将其存储为“DOWNLOADSTRING”变量。 上面的当前代码只能在文本文件中使用1个字符串,因为它抓住了一切'香蕉'。

这是干什么用的;我想为在线文本文件中的文件添加一些镜像下载链接,而当前的代码不允许这样做。

我可以让grep抓住一个随机的'banana'字符串吗? (而不是全部)

+0

选择第一个匹配的“字符串”就足够了吗?这可以用'grep -m 1 banana'完成。标志-m指定找到的最大行数 – bbaja42 2011-06-16 17:18:35

看到这个问题,看看如何得到一个随机行后grep。 rl似乎是一个很好的候选

What's an easy way to read random line from a file in Unix command line?

然后做一个grep ... | rl | head -n 1

试试这个:

DOWNLOADSTRING="$(curl -o - "http://example.com/folder/downloadlinks.txt" | grep "$VARIABLE")" | 
    sort -R | head -1 

输出将是随机排序,然后第一行会被选中。

+0

请注意“|”是一个命令分隔符(如“;”),所以你不需要行续字符“\” – 2011-06-16 18:41:39

+0

我想我曾经知道!我是这样说的,因为我不确定是否需要反斜杠;但无论如何,我确定。感谢您指出,我会编辑答案。 – 2011-06-16 22:20:43