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.