我想删除wget输出中的重复行。

我用这个代码

wget -q "http://www.sawfirst.com/selena-gomez" -O -|tr ">" "\n"|grep 'selena-gomez-'|cut -d\" -f2|cut -d\# -f1|while read url;do wget -q "$url" -O -|tr ">" "\n"|grep 'name=.*content=.*jpg'|cut -d\' -f4|sort |uniq;done

和这样的输出

http://www.sawfirst.com/wp-content/uploads/2018/03/Selena-Gomez-12.jpg

http://www.sawfirst.com/wp-content/uploads/2018/03/Selena-Gomez-12.jpg

http://www.sawfirst.com/wp-content/uploads/2018/03/Selena-Gomez-12.jpg

http://www.sawfirst.com/wp-content/uploads/2018/03/Selena-Gomez-12.jpg

http://www.sawfirst.com/wp-content/uploads/2018/02/Selena-Gomez-760.jpg

http://www.sawfirst.com/wp-content/uploads/2018/02/Selena-Gomez-760.jpg

我想删除重复的输出行。

最佳答案

在某些情况下,像Beautiful Soup这样的工具会更合适。

仅使用wgetgrep尝试执行此操作将成为一个有趣的练习,这是我的幼稚尝试,但我敢肯定,这样做的更好方法

$ wget -q "http://www.sawfirst.com/selena-gomez" -O -|
grep -Eo "(http|https)://[a-zA-Z0-9./?=_-]*" |
grep -i "selena-gomez" |
while read url; do
    if [[ $url == *jpg ]]
    then
        echo $url
    else
        wget -q $url -O - |
        grep -Eo "(http|https)://[a-zA-Z0-9./?=_-]*" |
        grep -i "selena-gomez" |
        grep "\.jpg$" &
    fi
done | sort -u > selena-gomez


在第一轮:

wget -q "http://www.sawfirst.com/selena-gomez" -O -|
grep -Eo "(http|https)://[a-zA-Z0-9./?=_-]*" |
grep -i "selena-gomez"


将提取与所需名称匹配的URL,在while循环中,可能是$url已经以.jpg结尾的情况,因此将仅打印而不是再次获取内容。

这种方法仅深入到1级,并尝试尽速使用&并最终并行执行多个请求:

grep "\.jpg$" &


需要检查&锁定还是等待所有后台作业完成

它以sort -u结尾,以返回找到的项目的唯一列表。

关于linux - 删除wget输出中的重复行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49053256/

10-11 06:45