É uma boa ideia complementar o shell script com perl apenas para uso de regex?

3

Eu estou procurando uma maneira simples de utilizar o regex em um shell script UNIX, onde nem todo sistema terá extensões perl embutidas no grep. O que é realmente útil sobre o regex do perl aqui é referências back / forward que eu não encontrei uma maneira de usar efetivamente em sed. Eu rapidamente criei o seguinte liner:

tail --bytes=+K something.log| perl -e 'while (my $line = <STDIN>){if ($line =~ /$ARGV[0]/){print $line};}' 'my regex'

Q1. Esta é uma maneira segura de fazer coisas para o perl? Q2 Devo recorrer a escrever o script inteiro em perl?

    
por jorb 19.04.2012 / 01:51

1 resposta

3

Eu não entendo porque o seu trecho perl está escrito desta forma. Você poderia escrever o regexp diretamente dentro do script:

perl -e 'while (my $line = <STDIN>) {if ($line =~ /my regex/) {print $line}}'

que permite que você aproveite a opção -n (como bônus, você recebe um relatório de erros adequado caso haja um erro de entrada). Além disso, usando idiomas perl:

perl -ne 'print if /my regex/'

Sed tem backreferences, mas os regexes estendidos de perl são mais poderosos, há coisas que você não pode fazer com sed (o sed não tem nem expressões regulares completas: alternation \| não é um recurso padrão, embora muitas implementações o tenham) ).

A maior parte do que você pode fazer com ferramentas tradicionais, você pode fazer facilmente em perl. Por exemplo, se você quiser pular os primeiros bytes K-1, você pode escrever

perl -ne 'BEGIN {read ARGV, "", 42-1}; …'

Se você quer portabilidade, muitas tarefas de processamento de texto podem ser feitas no awk, mas o awk não tem referências anteriores, então extrair texto de uma string pode ser desajeitado.

    
por 19.04.2012 / 02:24