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.