从两种类型的列表中提取URL

时间:2013-03-27 16:57:49

标签: regex linux shell grep

我必须从两种类型的列表中提取特殊的URL。

wav_list_01.txt:

http://www.example.com/3277rdsh6721vs2981fg66_453.wav?ID=8572145"
http://www.example.com/3277rdsh6721vs2981fg66_1234.wav?ID=8572145"
http://www.example.com/3277rdsh6721vs2981fg66_89.wav?ID=8572145"
http://www.example.com/3277rdsh6721vs2981fg66_356.wav?ID=8572145"

在这种类型的列表中,正确的URL始终是下划线后面有4位数的URL:

http://www.example.com/3277rdsh6721vs2981fg66_1234.wav?ID=8572145"

我可以使用以下grep命令完成此操作:

grep -o 'http[^"]*_[0-9]\{4\}.wav?ID=[0-9]\{1,\}' wav_list_01.txt

现在问题。我还必须从另一种类型的列表中提取特殊的URL。

wav_list_02.txt:

http://www.example.com/83d72jd72bnx27887f2s34_9.wav?ID=0942145"
http://www.example.com/83d72jd72bnx27887f2s34.wav?ID=0942145"
http://www.example.com/83d72jd72bnx27887f2s34_5.wav?ID=0942145"

在这种类型的列表中,正确的URL始终是 WITHOUT 下划线和单个数字:

http://www.example.com/83d72jd72bnx27887f2s34.wav?ID=0942145"

有什么方法可以修改上面的grep命令来使用wav_list_02.txt吗?如果不是在同一个脚本中处理这两个列表的下一个最佳解决方案是什么?

该脚本将在破折号外壳中运行,因此解决方案需要符合POSIX标准,最好也要简洁明了。

提前致谢。

SOLUTION:

在Thalmann的帮助下,找到了解决方案:

grep -o 'http[^"]*_[0-9]\{4\}.wav?ID=[0-9]\{1,\}\|\|http[^_]*?ID=[0-9]\{1,\}'

1 个答案:

答案 0 :(得分:0)

你可以使用not运算符'^'并说它可以是所有但不是下划线 - 如果匹配你有你的URL-它就像'[^ _] *'所有不是下划线的东西。

在grep命令上方使用'或'运算符插入,并且它将使用四位数字并且如果它们不包括下划线。 记得像这样逃避或运算符:'\ |'