grep sentença entre (e incluindo) dois padrões

2

Eu quero extrair frases que começam com

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

e terminar com

/

Por exemplo, eu quero extrair o seguinte sem os x's

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

Eu já tentei

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

No entanto, não está funcionando.

    
por Yusuke Otsubo 06.08.2018 / 18:08

4 respostas

1

Tente a seguinte expressão regular, https://www.instagram.com/p/[^/]\+/

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

A parte mágica é [^/]\+/ , ela pega tudo e inclui a próxima barra.

Exemplo de saída do script acima.

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

Usando o grep:

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

saída:

https://www.instagram.com/p/BRhNDg5jne7/
    
por 06.08.2018 / 18:37
0

sem necessidade de perl regex Você pode tentar:

grep -o "https://www.instagram.com/.*/"
    
por 06.08.2018 / 20:08
0

EDIT: uma vez que a questão teve algumas mudanças desde que postei minha resposta, o mesmo aconteceu com minha compreensão.

Se todas as linhas tiverem o padrão xxxx , tudo o que você precisa fazer é uma regex substituir por sed . Ou seja:

sed 's/xxxx*//g'

Se você precisar primeiro grep das linhas, envie pipe sed após grep . Ou seja:

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

Dependendo do padrão real que você tenha, essa abordagem pode ou não ser útil.

    
por 06.08.2018 / 18:25

Tags