awk e regex com {}

0

Eu quero imprimir o registro inteiro se ele contiver palavra e algum caractere, que são opcionais. Script:

/mount[ein]{0,2}/{
print $0}

Infelizmente isso não funciona. Sem "{" e "}" funciona. Eu tentei com "\" befor "{":

/mount[ein]\{0,2\}/{
    print $0}

Outro exemplo. Para arquivo:

mountx
mounte
mountee
mounteee

Awk:

awk '/mount[ein]{0,2}$/' file

E resultado:

// nada

Sistema: Debian 7.8 Linux ibm 3.2.0-4-amd64 # 1 SMP Debian 3.2.68-1 + deb7u1 x86_64 GNU / Linux

    
por diego9403 29.08.2015 / 19:15

3 respostas

0

Sua expressão regular funciona com awk e GNU awk compatíveis com POSIX.

Dado que os caracteres e , i e n devem estar presentes de zero a três vezes, mas que não há mais restrições, essa parte pode ser removida do padrão como mount seguido por nada ou nada combina de qualquer maneira. A ação ( print $0 ) sendo também a padrão não precisa ser especificada.

Seu comando pode ser simplificado para:

awk '/mount/'

Se você quiser que o intervalo seja usado, você precisa especificar algo depois dele, aqui está um exemplo:

$ cat input
foo
mountx
mounte
mountee
mounteee
$ /usr/xpg4/bin/awk '/mount[ein]{0,2}$/' input
mounte
mountee

Isso é no Solaris, onde o POSIX awk está em /usr/xpg4/bin .

O mesmo comportamento no Mint 17.1 baseado em Debian:

$ awk -V | head -1      
GNU Awk 4.0.1
$ awk '/mount[ein]{1,2}$/' input     
mounte
mountee

No entanto, parece que mawk , que reivindica compatibilidade com POSIX, não suporta a expressão de intervalo (chave).

$ mawk -W version
mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan
$ mawk '/mount[ein]{1,2}$/' input
$ 

Este é um conhecido bug .

    
por 29.08.2015 / 21:51
2

Exemplo tst.txt:

mountx
mounte
mountee
mounteee

script awk (GNU Awk 3.1.7)

awk --re-interval '/mount[ein]{0,2}$/' tst.txt > tst1.txt

resultado

mounte
mountee

homem awk

-W re-interval
--re-interval
          Enable the use of interval expressions in regular expression matching (see Regular Expressions, below).  Interval expressions were not traditionally available in the AWK
          language.  The POSIX standard added them, to make awk and egrep consistent with each other.  However, their use is likely to break old AWK programs, so  gawk  only  pro-
          vides them if they are requested with this option, or when --posix is specified.
    
por 01.06.2018 / 17:24
0

Não tenho certeza sobre o formato do comando de montagem, e a pergunta está listada como uma pergunta "awk", sem o awk no seu comentário.

É isso que você está procurando?

"imprima todas as linhas que contenham 0" (ou qualquer string que você esteja procurando) de um arquivo - use o comando

cat temp.txt | grep 0 | awk '{print $0}'

resultará em

0 9 8 7 6 5 4 3 2

5 4 3 2 1 0 9 8

em que temp.txt é

1 2 3 4 5 6 7

0 9 8 7 6 5 4 3 2

9 8 7 6 5 4

8 7 6 5 4 3

7 6 5 4 3

6 5 4 3

5 4 3 2 1 0 9 8

4

3

2

    
por 29.08.2015 / 19:43

Tags