sed inserir caracteres em posições específicas

4

Tenho centenas de arquivos *.txt que possuem um formato comum.

Eu posso inserir uma vírgula em uma posição específica em um arquivo, como generalizar o código abaixo para aplicar essa operação em vários locais para todos os arquivos *.txt no diretório?

sed -i 's/^\(.\{4\}\)/,/' blank.txt

Por exemplo, inserindo vírgulas nas posições 4, 8, 22, etc.

Algo assim talvez?

for i in *.txt; do
   sed -i 's/^\(.\{4\}\)/,/' $i
done
    
por danny_C_O_T_W 03.02.2016 / 23:45

2 respostas

6

Comece pelo mais à direita:

sed -i 's/./&,/22;s/./&,/8;s/./&,/4' ./*.txt

Caso contrário, a primeira substituição afetaria o deslocamento do segundo. Você sempre pode contabilizá-lo:

sed -i 's/./&,/4;s/./&,/9;s/./&,/24' ./*.txt
    
por 04.02.2016 / 08:46
4

De uma maneira geral , você pode fazer:

sed 's/./&,/4' <in >out

Isso adicionará uma vírgula na saída ao quarto caractere de todas as linhas de entrada com pelo menos esses caracteres.

E, se você seguir meu conselho, geralmente não use a opção -i para qualquer sed que ofereça uma.

    
por 04.02.2016 / 03:47