Como filtrar a saída do script no bash usando uma consulta como “(eu ou você) OU (john AND! doe)”?

1

Eu gostaria de poder passar qualquer saída de linha de comando para um script bash ou algum programa de linha de comando que filtre o conteúdo dependendo de uma pesquisa booleana - expressões regulares não são necessárias (mas tudo bem se elas forem suportadas)

Por exemplo, se eu tivesse um arquivo assim:

file1.txt

hello there
me and you are going to the store
this is a file created by john doe and his friend jane
john is here

então, executar meu script fictício pode ser feito da seguinte forma:

$ cat file1.txt | filter "(me OR you) OR (john AND ! doe)"
me and you are going to the store
john is here

Eu provavelmente poderia remendar algo como um monte de grep e grep -v chamadas, mas me pergunto se estou faltando alguma maneira mais sucinta de fazer isso?

    
por Brad Parks 20.07.2017 / 19:14

1 resposta

3

Para filtros mais complexos como este, awk pode fazer o trabalho:

awk '( /me|you/ ) || (/john/ && ! /doe/ )' /path/to/file
    
por 20.07.2017 / 19:30