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.