Como procurar um padrão usando o grep?

1

Eu quero pesquisar um arquivo para verificar padrões como este: text1,text2,[1.2.3,3.4.5,6.7.8,etc] existe. O número de vírgulas dentro dos colchetes é indefinido.

Eu tentei o seguinte comando, mas ele imprime as vírgulas depois de text1 e text2 , que não é o que eu quero. Estou procurando apenas por vírgulas dentro dos colchetes.

$ grep -E '[*,*]' myfile.txt

EDIT # 1

Aqui está uma amostra de entrada. Observe que as vírgulas dentro de colchetes podem ser maiores ou menores que o número no exemplo (ou seja, número indefinido, portanto, tenho que capturá-las com regex):

1.com,1.2.3.4,txt1,txt11,['1.2.3.4', '5.6.7.8']
2.com,3.4.5.6,txt2,txt21,['5.6.6.6']
3.com,5.5.5.5,txt3,txt31,['1.1.1.1', '2.2.2.2', '3.3.3.3']
    
por user9371654 12.08.2018 / 14:14

1 resposta

1

Para corresponder linhas que contenham pelo menos uma vírgula entre colchetes, você pode usar

grep '\[.*,.*\]'

Ex.

$ grep '\[.*,.*\]' file
1.com,1.2.3.4,txt1,txt11,['1.2.3.4', '5.6.7.8']
3.com,5.5.5.5,txt3,txt31,['1.1.1.1', '2.2.2.2', '3.3.3.3']

Os colchetes precisam ter escape, porque eles têm um significado especial na sintaxe da expressão regular. Observe que não precisei usar -E com grep , os recursos básicos de correspondência de grep foram suficientes.

OBSERVAÇÃO: grep normalmente exibirá as correspondências como coloridas, para que você possa saber o que realmente corresponde aos padrões usados:

    
por 12.08.2018 / 14:52