如何在 grep 中输出 x 数量的输出并跳过重复的输出

如何在 grep 中输出 x 数量的输出并跳过重复的输出

所以我在使用当前正在制作的快速 shell 脚本时遇到了麻烦,该脚本包括输入 YouTube 频道名称,然后找到 5 个最新视频。

我正在使用 YouTube 前端“vid.puffyan.us”来执行此操作。

因此,当 grep 5 个视频时,由于站点 html 的方式,相同的视频 id 重复 3 次,有没有办法跳过这些,并输出 5 个不同的 id?

我当前的代码是:

#!/bin/sh

query=$(printf '%s' "$*" | tr ' ' '+')
channel=$(curl -s "https://vid.puffyan.us/search?q=$query" | grep -Eo "channel/.{24}" | head -n 1)

if [ -z "$query" ]
then
    echo "blank input!"
else
    curl -s "https://vid.puffyan.us/$channel" | grep -Eo "watch\?v=.{11}" | head -n 5
fi

答案1

一个简单的修复来自mdmay74就是将输出通过管道uniq,然后通过head

例子:

curl -s "https://vid.puffyan.us/$channel" | grep -Eo "watch\?v=.{11}" | uniq | head -n 5

相关内容