Adicione o prefixo e o sufixo a cada linha em um arquivo .txt

4

Estou tentando anexar e preceder o texto a todas as linhas de um arquivo .txt.

Eu quero prefixar: I am a

Eu quero acrescentar: 128... [}

para todas as linhas.

Dentro de um.txt:

fruit, like
bike, like
dino, like

Ao executar o seguinte comando:

$ cat a.txt|sed 'I am a ',' 128... [}'

não funciona como eu quero. Eu realmente gostaria de dizer o seguinte:

I am a fruit, like 128... [}
I am a bike, like 128... [}
I am a dino, like 128... [}
    
por Terkey-Juice 31.03.2018 / 06:40

4 respostas

10

Abordagem simples sed :

sed 's/^/I am a /; s/$/ 128... [}/' file.txt
  • ^ - significa início da string / linha
  • $ - significa fim da string / linha

A saída:

I am a fruit, like 128... [}
I am a bike, like 128... [}
I am a dino, like 128... [}

Como alternativa, com Awk você pode:

awk '{ print "I am a", $0, "128... [}" }' file.txt
    
por 31.03.2018 / 06:42
3
sed 's/.*/PREFIX&SUFFIX/' infile

fará, assumindo que PREFIX e SUFFIX não contenham caracteres especiais.

\&/ (barra invertida, e comercial e delimitador) são especiais quando no lado direito de uma s ubstitution. O significado especial desses caracteres pode ser suprimido escapando deles (precedendo-os por uma barra invertida), e. para prefixar A//BC e para acrescentar XY\Z&& , seria executado:

sed 's/.*/A\/\/BC&XY\Z\&\&/' infile
    
por 31.03.2018 / 23:12
2

Perl:

$ perl -lne 'print "I am a $_ 128... [}"' file 
I am a fruit, like 128... [}
I am a bike, like 128... [}
I am a dino, like 128... [}

Mais Perl:

$ perl -pe 's/^/I am a /; s/$/ 128... [}/' file 
I am a fruit, like 128... [}
I am a bike, like 128... [}
I am a dino, like 128... [}

E um pouco mais Perl:

$ perl -lpe '$_="I am a $_ 128... [}"' file 
I am a fruit, like 128... [}
I am a bike, like 128... [}
I am a dino, like 128... [}

Para todos esses, você pode usar -i para fazer a alteração no arquivo original:

$ perl -i -lne 'print "I am a $_ 128... [}"' file 
$ perl -i -pe 's/^/I am a /; s/$/ 128... [}/' file 
$ perl -i -lpe '$_="I am a $_ 128... [}"' file 
    
por 31.03.2018 / 14:09
1

Sed alternativa

sed -e 's/^\(.*\)$/I am a  128 [{/

Ele procura por tudo .* entre o início ^ e o final da linha $ e o coloca em um grupo \( \) . Em seguida, ele é substituído pelo prefixo, o (primeiro) grupo e o sufixo.

    
por 31.03.2018 / 13:21