Se você insistir em fazer isso com sed
:
( sed 1q file2.csv; sed 1d file1.csv ) >file3.csv && mv file3.csv file1.csv
Sem sed
:
( head -1 file2.csv; tail -n +2 file1.csv ) >file3.csv && mv file3.csv file1.csv
Eu quero substituir o cabeçalho em file1.csv
pelo cabeçalho em file2.csv
file1.csv
"a","b","c"
file2.csv
"x","y","z"
Eu quero o cabeçalho de file1.csv
como
"x","y","z"
Por favor, me diga como fazer isso? Eu tentei
sed -i "1 s/^.*$/$file2.csv/" file1.csv
Mas não é preciso o ""
(aspas). Eu quero o cabeçalho com as aspas.
Você pode escapar de qualquer barra invertida na primeira linha em file2.csv
, pré-adicionar 1c\
e uma nova linha e q
uit, canalizando as duas linhas resultantes para outro sed
que lê o arquivo de script de stdin
:
sed 's/\/&&/g;x;s/.*/1c\/;G;q' file2.csv | sed -i -f - file1.csv
ou com ed
, abra file1.csv
e leia em file2.csv
cabeçalho após a primeira linha e exclua a primeira linha:
ed -s file1.csv <<\IN
1r ! head -n1 file2.csv
1d
w
q
IN
Se file2.csv
contiver apenas linha única
sed -i "1 s/.*/$(< file2.csv)/" file1.csv
Se file2.csv
contiver várias linhas
sed -i "1 s/.*/$(sed '1q' file2.csv)/" file1.csv
ou
sed -i "1 s/.*/$(head -1 file2.csv)/" file1.csv
Nota:
Se a linha de file2.csv
contiver o caractere delimitador /
, ocorrerá um erro como unknown option to 's'
. Use diferentes delimitadores como |
em tais casos
Tags text-processing awk sed