Altera a posição do caractere com sed

2

O arquivo contém:

dateutkfilename25012009

Eu quero mudar a posição do personagem de 16 para 17 com o 18º para o 19º. E então mude a posição do personagem de 16º para 19º com 20º para 23º ... então será:

dateutkfilename20090125

Eu tentei mudar a posição do personagem de 16 para 17 com o 18º para o 19º usando o código abaixo, mas não entendi porque não funciona:

'/dateutkfilename/s/\(.\{16\}\)\([0-9]\{2\}\)\(.*\)/\(.\{18\}\)\([0-9]\{2\}\)\(.*\)/g'
    
por Najib-botak Chin 03.08.2011 / 19:28

3 respostas

4

Aqui está a resposta para sua pergunta:

s/^\(.\{15\}\)\(.\{2\}\)\(.\{2\}\)\(.\{4}\)//

Mas se você conseguir ancorar no final, fica mais simples:

s/\(.\{2\}\)\(.\{2\}\)\(.\{4\}\)$//

Pessoalmente, eu provavelmente faria [0-9] em vez de . :

s/\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{4\}\)$//

Como de costume, há mais de uma maneira de fazer isso.

    
por 03.08.2011 / 19:47
1
$ sed -e 's/\(.\{15\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{4\}\)//g' /tmp/test.txt

parece fazer o que você está esperando.

    
por 03.08.2011 / 19:43
0
sed '/\(dateukfilename\)\(..\)\(..\)\(....\)/s///'
    
por 21.05.2014 / 01:33