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, sed
usaexpressõ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 -r
opção para sed
denota 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'