% sed 's/^/file1:/' file1
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.
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.
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.
read
divide por $IFS
, então você precisa limpar isso primeiro.
while IFS= read line
do
echo "file1:$line"
done
Escapando caracteres especiais:
printf -v prefix %q 'ab\cd%;,: /{][}-+*'; prefix=${prefix////\/}; sed "s/^/$prefix/" file
O equivalente AWK da resposta sed:
awk '{gsub(/^/,"file1:")}1' file
Ou simplesmente:
awk '{$0="file:1"$0}1' file
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:
Tags bash