Use ex , o editor de arquivos POSIX
ex é a forma não visual do editor de arquivos vi . Na verdade, é anterior a vi . vi (e Vim) ainda usam comandos ex ; sempre que você digitar dois pontos e digitar um comando, isso é um comando ex (embora o Vim tenha muitas extensões personalizadas).
Como ex abre o arquivo todo para leitura, em vez de operar em um fluxo, o endereçamento pode funcionar tanto para trás quanto para frente, diferente de Sed ou Awk.
Para essa edição específica, use o seguinte liner:
printf '%s\n' 'set ignorecase' '$+?searchword?i' 'NEWLINE_1_ADDED' 'NEWLINE_2_ADDED' 'NEWLINE_3_ADDED' . x | ex input.txt
Para testar o comando (imprimir na saída padrão em vez de salvar no arquivo), use %p em vez de x como o comando final:
printf '%s\n' 'set ignorecase' '$+?searchword?i' 'NEWLINE_1_ADDED' 'NEWLINE_2_ADDED' 'NEWLINE_3_ADDED' . %p | ex input.txt
Para lidar com vários arquivos:
for f in *.txt; do
printf '%s\n' 'set ignorecase' '$+?searchword?i' 'NEWLINE_1_ADDED' 'NEWLINE_2_ADDED' 'NEWLINE_3_ADDED' . x | ex "$f"
done
Explicação
Executando o comando printf sozinho, você pode ver os comandos que são passados para ex :
set ignorecase
$+?searchword?i
NEWLINE_1_ADDED
NEWLINE_2_ADDED
NEWLINE_3_ADDED
.
x
O comando set é autoexplicativo.
$+ refere-se à linha após a última linha, e ?...? significa pesquisar para trás a partir daí. (O + faz com que um arquivo com uma última linha correspondente seja tratado corretamente.) i significa "inserir" o texto antes da linha encontrada.
O . em uma linha, por si só, termina o texto a ser inserido.
x salva e sai.