egrep -nH 'Dansk|Norsk|Svenska' file3
ou usando ripgrep
rg 'Dansk|Norsk|Svenska' file3
Mas há uma resposta
awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}END{ if (a && b && c) print $0 }' file3
Eu não entendo essa resposta.
eu entendo awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}
.
Acho que agora a questão está usando awk, enquanto o padrão corresponde, imprime o número da linha com as linhas de saída.
atualização: eu até entendo essa resposta. atualização:
quase perto:
awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}{ if (a || b || c ) print $0; next}1' file3
ele retorna
Subtitle: 04, Language: da - Dansk, Content: Undefined, Stream id: 0x23,
Subtitle: 05, Language: de - Deutsch, Content: Undefined, Stream id: 0x24,
o retorno esperado é
Subtitle: 04, Language: da - Dansk, Content: Undefined, Stream id: 0x23,
file3
contente:
Disc Title: unknown
Title: 01, Length: 01:33:37.000 Chapters: 33, Cells: 31, Audio streams: 04, Subpictures: 20
Subtitle: 01, Language: ar - Arabic, Content: Undefined, Stream id: 0x20,
Subtitle: 02, Language: bg - Bulgarian, Content: Undefined, Stream id: 0x21,
Subtitle: 03, Language: cs - Czech, Content: Undefined, Stream id: 0x22,
Subtitle: 04, Language: da - Dansk, Content: Undefined, Stream id: 0x23,
Subtitle: 05, Language: de - Deutsch, Content: Undefined, Stream id: 0x24,
(...)
atualizar. quase perto.
awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}{ if (a || b || c ) print NR, $0}' file3
Mas ele retorna
6 Subtitle: 04, Language: da - Dansk, Content: Undefined, Stream id: 0x23,
7 Subtitle: 05, Language: de - Deutsch, Content: Undefined, Stream id: 0x24,
8 (...)
awk consiste em par de condição(ões) e ação(ões) cuja parte da condição pode ser qualquer expressão aritmética ou correspondência de padrões ou resultado de uma ou mais expressões em que todos esses resultados podem ser declarações verdadeiras ou falsas;
e aqui, o exemplo fornecido é usado um par de correspondência de padrões e ações que é:
todos os 3 fazendo a mesma correspondência de padrões e defina um sinalizador de variável temporária se esses regex forem encontrados em uma linha.
em seguida, no bloco END{}, que este bloco executa apenas uma vez após todos os registros/linha do arquivo infile de entrada serem processados, o que simplesmente verifica se todos os sinalizadores foram definidos (significa que todos os 3 padrões foram encontrados ou foram encontrados em um único linha ou no arquivo de entrada while) e imprima a última linha (você pode querer imprimir FILENAME em vez ou outra coisa) do arquivo de entrada.
Resposta à segunda pergunta adicionada sobre:
isso imprime as linhas em que essa linha continha pelo menos um
Dansk
ouNorsk
ouSvenska
nela, caso contrário, imprime a linha em que tudo o que esse comando faz pode ser escritoawk 1 infile
oucat infile
.In
x ||y ||z || ...
significa "se x OR y OR z OR ... pelo menos um for True" então faça alguma coisa enquanto inx && y && z &&...
significa "se x AND y AND z AND ... todos eles foram True" então faça algo; "Verdadeiro" significa o resultado de uma(s) expressão(ões) ou condição(ões) avaliada(s) como resultado verdadeiro.