【问题标题】:Match URL pattern within file using SED, AWK or GREP使用 SED、AWK 或 GREP 匹配文件中的 URL 模式
【发布时间】:2014-03-04 19:34:14
【问题描述】:
【问题讨论】:
标签:
regex
unix
sed
awk
grep
【解决方案1】:
sed -nr 's/http\S*(jpg\|gif\|other\|ext)/\
curl $CURLOPTS & >$OUT/p' <$infile | sh -n
上述命令将在 $infile 中搜索以“http”开头的任何字符串,后跟任意长度的非空白字符并以任何“\|”结尾括号中包含的分隔文件扩展名。
一旦找到这样的字符串,sed 会将其替换到第二行的 curl 命令行中以替换“&”。然后它将命令字符串通过管道传输到 sh 以执行。
请记住,sed 是流编辑器,而不仅仅是流搜索器,因此它可以非常有效地预处理其他命令的输入,以使它们执行您想要的操作。
注意:sh 当前传递了 'noexecute' 参数,它的工作原理基本上更像 echo,而不是其他任何东西。当您运行它几次并且对您所做的事情感到满意时,您需要将其删除以达到任何效果。
注意 2:如果您可能希望每行匹配多个 url,则需要 'g' sed 选项。
【解决方案2】:
您可以通过以下方式捕获url 模式:
grep -o 'http.*.jpg' file
$ grep -o 'http.*.jpg' <<EOF
> title : "Family Vacation", jpg:"http://picturesite.com/wp-content/uploads/2014/01/mypicture.jpg", owner : "PhotoTaker
> EOF
http://picturesite.com/wp-content/uploads/2014/01/mypicture.jpg
curl 不会从标准输入中获取url,因此最好的办法是将提取的url 存储到一个文件中,然后一次读取一行文件并将保存该行的变量传递给curl 命令。