SED - exibe linhas com 3 'x' sinais

0

Eu tenho um problema com uma tarefa do título. Usando o SED eu tenho que exibir linhas com 3 'x' sinais.

Eu sei como fazer isso com um sinal, mas não consigo escrever o comando para 3 sinais.

Exemplo de entrada:

   blaxblax 
   xxox
   xxx23
   0x1a
   xxxx

saída:

   xxox
   xxx23
    
por lopp 02.01.2018 / 18:51

4 respostas

4

O que você precisa fazer aqui é criar uma expressão regular que corresponda a:

  • a partir do início da linha, (zero ou mais caracteres não "x" seguidos de um "x") 3 vezes
  • seguido por zero ou mais caracteres não "x" até o final da linha

Com sed você escreveria (assumindo o GNU sed)

sed -rn '/^([^x]*x){3}[^x]*$/p'
    
por 02.01.2018 / 19:14
4

Abordagem do Short GNU awk :

awk -v FPAT='x' 'NF==3' file
  • FPAT - valor do campo de definição do padrão
  • NF - número total de campos (no nosso caso - o número de x car ocorrências)

A saída:

xxox
xxx23
    
por 02.01.2018 / 19:16
1
sed -n '/x\{2,3\}/p' test.txt |sed '/x\{4,\}/d'

Saída:

xxox
xxx23
    
por 02.01.2018 / 19:16
0

Outra abordagem do sed do GNU

sed -n 's/x/x/3;T;s/x/x/4;t;p'

POSIXly, você usaria grep , não há necessidade de sed para isso:

grep -Ex '([^x]*x){3}[^x]*'

grep pattern pode sempre ser escrito sed '/pattern/!d' , embora o POSIX sed compreenda somente o BREs:

sed '/^\([^x]*x\)\{3\}[^x]*$/!d'

com awk :

awk -F x 'NF == 4'
    
por 04.01.2018 / 22:40