Quando procuro guias em um arquivo com (e) grep, uso a guia literária ( ^v + <tab>
). Não posso utilizar \t
como um substituto para guias em expressões regulares. Com eg sed esta expressão funciona muito bem.
Portanto, existe a possibilidade de usar um substituto não literário <tab>
e quais são os antecedentes de um não-trabalho / não interpretado \t
?
bash
grep
regex
posix-compliant
Lasall
fonte
fonte
Respostas:
grep está usando expressões regulares, conforme definido pelo POSIX . Por qualquer motivo, o POSIX não definiu
\t
como tab.Você tem várias alternativas:
diga ao grep para usar as expressões regulares conforme definido pelo perl (o perl tem
\t
como tab):a página de manual avisa que esse é um recurso "experimental". pelo menos
\t
parece funcionar bem. mas recursos perl regex mais avançados podem não.use printf para imprimir um caractere de tabulação para você:
use o caractere de tabulação literal:
ou seja: digite
grep "
, pressionectrl+v
, depois pressionetab
e digite" foo.txt
. pressionarctrl+v
no terminal faz com que a próxima tecla seja tomada literalmente. isso significa que o terminal inserirá um caractere de tabulação em vez de acionar alguma função vinculada à tecla tab.use o recurso de cotação ansi c do bash:
isso não funciona em todas as conchas.
use awk:
use sed:
Consulte o artigo da wikipedia sobre expressões regulares para obter uma visão geral das classes de caracteres definidas no POSIX e em outros sistemas.
fonte
grep $'\t' foo.txt
(mas eu normalmente escreverfgrep
em vez degrep
)grep "$(printf '\t')${myvar}" foo.txt
. Funcionou bem. Com algumas tentativas, não consegui que o último formulário funcionasse.grep
não possa silenciosamente interpretar\t
como guia? O POSIX exige que isso\t
signifique algo mais? Talvez deva corresponder apenas a um literal\
seguido de umt
?This is highly experimental and grep -P may warn of unimplemented features.
Provavelmente não é uma boa ideia usar-P
em sistemas legados. Aprintf
escolha é melhorNão é exatamente a resposta que você gostaria de ouvir, mas um possível uso de seqüências de escape é fornecido pelo bash
(não coloque entre aspas duplas!).
fonte
grep $'\t'
.awk '/\t/'
é minha solução alternativa favorita:Saída:
a\t
.fonte
Pode-se sempre recorrer ao uso de código hexadecimal ascii para tab:
fonte