Qual é o caractere ^ I e como posso encontrá-lo com sed?

4

Eu geralmente importo dados de arquivos csv para o MySQL, mas meu provedor de dados deixa as entradas NULL como "", então eu preciso substituir "" por "\ N". Isso é bastante fácil com um script como

for csvfile in *.csv
do
    sed -i -e 's/^,/\N,/' -e 's/,$/,\N/' -e 's/,,/,\N,/g' -e 's/,,/,\N,/g' $csvfile
done

No entanto, eu tenho um arquivo csv com vírgulas, então a importação falha. Eu tenho o arquivo como "delimitado por tabulações" e tentei

for txtfile in *.txt
do
    sed -i -e 's/^\t/\N\t/' -e 's/\t$/\t\N/' -e 's/\t\t/\t\N\t/g' -e 's/\t\t/\t\N\t/g' $txtfile
done

Mas ainda assim falha (até onde eu posso dizer, o script não adiciona nenhum "\ N"). Quando abro o arquivo delimitado por tabulações no Vim e digito :set list , parece que as guias são armazenadas como "^ I". Tentei substituir "\ t" por "\ ^ I", mas não adiciono os caracteres "\ N" NULL de que preciso.

Alguma ideia? Obrigado!

    
por Richard Herron 23.06.2011 / 21:54

2 respostas

2

Você já tem uma resposta para o que o ^ Is é, mas uma razão pela qual seu segundo comando sed falha é que você está usando a sequência errada para corresponder a uma guia. A sequência que corresponde a uma guia é \t , não \t . \t corresponde a \ seguido por t .

    
por 23.06.2011 / 23:18
6

^ é normalmente um atalho para Ctrl e Ctrl-I é o mesmo que Tab

    
por 23.06.2011 / 22:16