grep tab e star character

2

Como posso fazer uma combinação de caracteres tab e star ( * ) em um arquivo de texto?

Por exemplo:

Entrada:

text    *    0    *    0    *    *    some_text
text    *    9    45   9    0    0    some_text
TEXT    *    0    *    0    0    *    some_text

Eu preciso do grep para uma combinação específica de tabulação e estrela e zeros, por exemplo:

*    0    *    0    0    *

Resultado esperado:

TEXT    *    0    *    0    0    *    some_text

Eu posso grep para estrelas, separadamente, usando:

grep -P '\t' input > output

Eu posso buscar guias separadamente, usando:

grep '\*' input > output

Mas como posso combinar os dois? Estou tentando, sem sucesso, a seguinte combinação:

grep -P '\*\t0\t\*0\t0\*' input > output
    
por dovah 04.08.2016 / 14:35

2 respostas

4

Portável:

tab=$(printf '\t')
grep -F "*${tab}0${tab}*${tab}0${tab}0"

Com alguns shells ( ksh93 , zsh , bash , mksh , FreeBSD sh ), você pode usar:

grep -F $'*\t0\t*\t0\t0'

( $'\t' também pode ser escrito $'\u0009' ou (em sistemas baseados em ASCII) $'\x09' , $'' ou $'\CI' )

Algumas implementações de grep , como a de ast-open, reconhecem \t (ou \x09 ) como um caractere de tabulação. Então você pode fazer:

grep '\*\t0\t\*\t0\t0'

(o mesmo com outros tipos de expressões regulares lá ( -E para ERE, -P para perl-like (semelhante a PCRE), -A para aumentada).

O GNU grep (pelo menos nos sistemas GNU) não reconhece \t nem \x09 com BRE ou ERE, mas faz com PCREs (quando o suporte foi incorporado), (e também \x09 ou ).

grep -P '\*\t0\t\*\t0\t0'

funcionaria com o GNU grep desde que o suporte a PCRE fosse ativado (o que costuma ser o caso em sistemas modernos).

Outra solução portátil é usar awk se o \t for universalmente suportado:

awk '/\*\t0\t\*\t0\t0/'
    
por 04.08.2016 / 15:10
1

De acordo com ilkkachu comment:

Because there are missing a couple of tabs in '*\t0\t*0\t0*': in the middle there's a 0, and in the end a 0.

O comando:

grep -P '\*\t0\t\*\t0\t0'

resolverá esse problema.

    
por 04.08.2016 / 14:51

Tags