Script do Sedh iterando várias vezes

2

Eu tenho uma tarefa de editar um arquivo de texto chamado LOLOLOL .

HRFJGEKGJHEJGKJVNEJGKJEG BOB BO B

GARY gARY gARY gary

FOG GARY bob bob bob Gary gary

the the bird in the the bush!

LOL MATE!

Eu tenho um arquivo de script chamado lolz.script :

#!/bin/bash

sed '1i Hee hee hee\n Ho Ho Ho\n' 
sed 's/bob/Bob/g' 

executando .\lolz.script LOLOLOL na linha de comando, recebo várias iterações do comando LOLOLOL text- precisamente, uma iteração por sed.

Por exemplo, a saída mostra os primeiros e segundos comandos sed (aplicados para cada) aqui:

*Hee Hee Hee 
Ho Ho Ho*
HRFJGEKGJHEJGKJVNEJGKJEG BOB BO B

GARY gARY gARY gary

FOG GARY bob bob bob Gary gary

the the bird in the the bush!

LOL MATE!
HRFJGEKGJHEJGKJVNEJGKJEG BOB BO B

GARY gARY gARY gary

FOG GARY *Bob Bob Bob* Gary gary

the the bird in the the bush!

LOL MATE!
  • --- * mostra a parte alterada do arquivo de texto na saída.

Considerando o que eu quero saída:

*Hee Hee Hee 
Ho Ho Ho*
HRFJGEKGJHEJGKJVNEJGKJEG BOB BO B

GARY gARY gARY gary

FOG GARY Bob Bob Bob Gary gary

the the bird in the the bush!

LOL MATE!

Como você pode ver, cada comando sed é aplicado independentemente em cada iteração da impressão do arquivo de texto. Eu preciso que todos os comandos sed sejam aplicados juntos .

Observe como o cabeçalho desejado do primeiro comando sed é aplicado na primeira iteração, enquanto no segundo não é (mas a% é bob a Bob ).

Por que isso aconteceu e o que posso fazer para tornar os comandos em um script cumulativos para um arquivo de texto? Isso não parece acontecer com o script awk no mesmo formato.

    
por KMoy 23.10.2016 / 10:14

1 resposta

2

Simplesmente: você está invocando sed duas vezes.

Se você executar esses comandos em um terminal um após o outro, você terá dois conjuntos de saída. Seu script está apenas fazendo a mesma coisa em seu próprio shell.

Você pode usar {} para agrupar comandos e colocar cada um em uma nova linha ou usar ; , então todos os comandos agem no arquivo cumulativamente, chamando sed apenas uma vez:

#!/bin/bash
sed '{
     1i Hee hee hee\n Ho Ho Ho\n
     s/bob/Bob/g
}' ""

saída de ./script file

Hee hee hee
 Ho Ho Ho

HRFJGEKGJHEJGKJVNEJGKJEG BOB BO B

GARY gARY gARY gary

FOG GARY Bob Bob Bob Gary gary

the the bird in the the bush!

LOL MATE!
    
por Zanna 23.10.2016 / 10:23