Com vi
/ vim
/ ex
, você pode escrever um one-liner não interativo para isso, ou fazê-lo em um editor aberto.
Você pode usar qualquer um desses comandos do seu shell. Eles abrem o editor, adicionam texto ao início e ao final de cada linha, salvam o arquivo com um nome de arquivo diferente e encerram o editor:
ex in.txt '+%s/.*/<before> & and <after each line>/' '+wq out.txt'
vi in.txt '+%s/.*/<before> & and <after each line>/' '+wq! out.txt'
O primeiro comando usa ex
mode e wq
é suficiente para salvar o buffer como out.txt
e sair. O segundo comando usa o modo vi
e, como o buffer alterado ainda está aberto e não foi salvo no arquivo original , ele requer a versão !
do comando.
O segundo comando também funciona no modo ex
(e com vim
em vez de vi
), mas não há razão para evitar ex
para one-liners. A verdadeira razão pela qual mostro a versão vi
que você pode usar, com :
em vez de +
em cada comando, para executar a alteração interativamente durante a edição interativa em vi
ou vim
.
Com in.txt
aberto no editor ( vim in.txt
) você pode executar:
:%s/.*/<before> & and <after each line>/
:wq! out.txt
Quer você use a versão não interativa ou interativa, eles funcionam da mesma maneira. vi
e vim
(e muitos outros editores de texto na " vi
family") suportam pesquisa e substituição com uma sintaxe sed
-like. Você notará a semelhança com o método sed
na resposta da sobremesa :
-
.*
é uma expressão regular que corresponde a qualquer caractere ( .
) zero ou mais vezes ( *
), correspondendo assim a uma linha inteira.
-
&
significa todo o jogo.
-
s/pattern/replacement/
substitui a primeira ocorrência de pattern
em uma linha com replacement
.
sed
aplica automaticamente seu script na linha cada . vi
/ vim
/ ex
oferece um controle mais refinado. %s
executa a ação de pesquisa e substituição ( s
) em todas as linhas ( %
) e também pode ter sido escrito 1,$s
. Se você quisesse mudar apenas uma linha, poderia escrever algo como 3s
(apenas a terceira linha). Da mesma forma, você pode alterar qualquer intervalo de linhas, por exemplo, 3,10s
da terceira para a décima linhas ou 10,$s
da décima e todas as linhas com números mais altos.