Como adiciono um prefixo / sufixo a cada linha de um arquivo?

5

Por exemplo, o arquivo1 contém:

entry1:value1
entry2:value2
entry3:value3

Agora quero adicionar um prefixo "file1:" a cada linha:

file1:entry1:value1
file1:entry2:value2
file1:entry3:value3

Como posso fazer isso em uma linha de comando?

Estou usando o Bash.

BTW, o espaço principal deve ser preservado, portanto, a linha de leitura integrada do Bash não funciona para mim.

    
por Xiè Jìléi 12.07.2010 / 14:34

7 respostas

8
% sed 's/^/file1:/' file1
    
por 12.07.2010 / 14:58
2

O mais legível e fácil de lembrar é que para adicionar o prefixo e sufixo é o seguinte:

$ echo "  foo bar  " | awk '{print "--"$0"++"}'

quais saídas

  --  foo bar  ++

Observe que toda a entrada, incluindo espaços iniciais / finais, é preservada.

    
por 03.12.2013 / 15:46
2

Usando o AWK, você pode adicionar praticamente qualquer prefixo:

awk -v PRE='anything:' '{$0=PRE$0; print}' file1

Isso funcionará mesmo para caracteres sofisticados não imprimíveis.

    
por 08.08.2011 / 23:00
1

read divide por $IFS , então você precisa limpar isso primeiro.

while IFS= read line
do
  echo "file1:$line"
done
    
por 12.07.2010 / 15:12
1

Escapando caracteres especiais:

printf -v prefix %q 'ab\cd%;,: /{][}-+*'; prefix=${prefix////\/}; sed "s/^/$prefix/" file
    
por 12.07.2010 / 15:42
1

O equivalente AWK da resposta sed:

awk '{gsub(/^/,"file1:")}1' file

Ou simplesmente:

awk '{$0="file:1"$0}1' file
    
por 25.07.2010 / 05:00
0

Perl pode lidar com isso sem nenhuma dificuldade particular. Eu estou testando-os com a variável $foo , que contém todos os caracteres estranhos em que posso pensar, incluindo o retorno de carro, o espaço etc:

$ foo=$(echo -e "\r'{}[]- \'~^&%$=@\!#\"")
$ echo $foo | od -c
0000000  \r   '   {   }   [   ]   -       '   ~   ^   &   %   $   =   @
0000020   \   !   #   "  \n
0000025
$ export foo

Portanto, para adicioná-los ao início e ao final de cada linha de arquivo bar.txt :

perl -ne 'chomp; print "$ENV{foo}:$_:$ENV{foo}\n"' bar.txt

O hash %ENV contém as variáveis de ambiente do usuário (é por isso que eu exporto $foo acima). A variável especial $_ contém a linha atual e chomp remove a nova linha à direita:

    
por 30.07.2013 / 17:35

Tags