next if /^#/; ...; print
significa que as linhas que começam com #
não serão impressas.
Aqui, você quer
perl -i -ne 'next if !/^\s*#/ && /abra_kadabra/ && $count++; print' /tmp/test
Isso é o que você quer não para chamar next
para as linhas comentadas se você quiser preservá-las.
Mesmo com sed
para as implementações que suportam -i
( -i ''
com FreeBSD e derivados):
sed -i -e '/^[[:space:]]*#/b' -e '/abra_kadabra/!b' -e 'x;/./d;g' /tmp/test
Onde usamos o espaço para lembrar se já vimos abra_kadabra
antes.