grep 两个模式之间(并包含)的句子

grep 两个模式之间(并包含)的句子

我想提取以

https://www.instagram.com/p/

并结束于

/

例如,我想提取以下不带 x 的内容

××××××https://www.instagram.com/p/BRhNDg5jne7/××××××××

我已经尝试过了

grep "https://www.instagram.com/p/*/"

但是,它不起作用。

答案1

尝试以下正则表达式,https://www.instagram.com/p/[^/]\+/

#!/bin/bash
data="××××××https://www.instagram.com/p/BRhNDg5jne7/××××××××"
echo "$data" | grep -o 'https://www.instagram.com/p/[^/]\+/'

神奇的部分是[^/]\+/,它抓住一切直到并包括下一个正斜杠。

上述脚本的示例输出。

zb@server ~ $ ./tmp.sh 
https://www.instagram.com/p/BRhNDg5jne7/

答案2

使用 grep :

echo "××××××https://www.instagram.com/p/BRhNDg5jne7/××××××××"  | grep -Po "(?s)(http(.*?)(\/p\/.*\/|\/\Z))"

输出:

https://www.instagram.com/p/BRhNDg5jne7/

答案3

不需要 perl 正则表达式 你可以尝试:

grep -o "https://www.instagram.com/.*/"

答案4

编辑:由于自从我发布答案以来问题发生了一些变化,所以我对它的理解也发生了变化。

如果您的所有行都有该模式xxxx,那么您所要做的就是将正则表达式替换为sed。 IE:

sed 's/xxxx*//g'

如果您首先需要grep行,请sed在 后进行管道传输grep。 IE:

grep "https://www.instagram.com/p/" | sed 's/xxxx*//g'

根据您拥有的实际模式,这种方法可能有用也可能没用。

相关内容