Usando sed para executar substituições em um arquivo

0

Eu estava tentando substituir datas em um arquivo enorme usando sed. Eu tentei:

sed -ie 's/2014-[0-9]{2}-[0-9]{2}/2014-05-07/g' test

No entanto, nada aconteceu, meu teste de arquivo não foi modificado. Você sabe o que eu sinto falta aqui?

Muito obrigado.

    
por user1058398 07.05.2014 / 09:46

3 respostas

6

Por padrão, sed usa expressões regulares básicas . Em BRE, { , } , ( , ) atuam como caracteres comuns. Como tal, você precisa escapar do { e } :

sed -i 's/2014-[0-9]\{2\}-[0-9]\{2\}/2014-05-07/g' test

Você não precisaria escapar deles usando expressões regulares estendidas, por exemplo

sed -r -i 's/2014-[0-9]{2}-[0-9]{2}/2014-05-07/g' test

A opção -r para sed denota ERE:

   -r, --regexp-extended

          use extended regular expressions in the script.

Além disso, usar -e é redundante no seu exemplo.

    
por 07.05.2014 / 09:51
3

Tente escapar das chaves:

sed -ie 's/2014-[0-9]\{2\}-[0-9]\{2\}/2014-05-07/g' test
    
por 07.05.2014 / 09:49
2

Ou

echo "foo 2014-01-01 bar" | sed -r 's/2014-[0-9]{2}-[0-9]{2}/2014-05-07/g'

ou

echo "foo 2014-01-01 bar" | sed 's/2014-[0-9]\{2\}-[0-9]\{2\}/2014-05-07/g'
    
por 07.05.2014 / 09:52

Tags