Usando sed para realizar substituições em um arquivo

Usando sed para realizar substituições em um arquivo

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

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

Porém, nada aconteceu, meu arquivo test não foi modificado. Você sabe o que estou perdendo aqui?

Muito obrigado.

Responder1

Por padrão, sedusaexpressões regulares básicas. Em BRE, {, }, (agem )como personagens comuns. Como tal, você precisaria escapar do {and }:

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

Você não precisaria escapar deles se estivesse usando expressões regulares estendidas, ou seja

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

A -ropção para seddenota ERE:

   -r, --regexp-extended

          use extended regular expressions in the script.

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

Responder2

Tente escapar das chaves:

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

Responder3

Qualquer

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'

informação relacionada