Linhas grep de foe para foe2 (não incluídas), regexp

0

O arquivo é organizado em entradas do formulário:

foe,
  1....
  2....
  3....
foe2,
  1....
  2....

Todos os subitens começam com quatro espaços e, em seguida, com texto ou item numérico. Todas as entradas como inimigo começam sem espaço. Assim, a próxima entrada começa quando um elemento não tem espaço em branco no início da linha. O arquivo inteiro é assim e cada entrada pode ter tamanho diferente.

Eu quero um regexp que produza uma entrada como foe e os subitens (mas não inclua o próximo item, foe2).

    
por Juana Sorayeen 16.03.2014 / 02:46

3 respostas

1

Eu não tenho certeza de como não incluir o foe2 apenas pelo awk, então eu uso o sed também.

$ awk '/foe/,/foe2/' file | sed '$ d'
    
por 16.03.2014 / 03:09
1
  $ awk '/foe2/{exit} /foe/ {p=1} p' sample.txt

Isto imprimirá cabeçalhos e subitens foe, excluindo o próximo cabeçalho, isto é, foe2

    
por 16.03.2014 / 03:34
1

Você pode fazer isso de várias formas.

Usando sed :

sed '/foe/,/foe2/{/foe2/!b};d' file

Usando awk :

awk '/foe2,/{p=0}/foe,/{p=1}p' file

Usando perl :

perl -lne 'if(/foe/.../foe2/ and $_!~/foe2/){print}' file

Se você quiser print until next entry (whatever word that is) , deve ter certeza de que sua estrutura de entrada não muda:

awk '/^[a-z]/{p=0}/foe,/{p=1}p' file
    
por 16.03.2014 / 07:23