> today=$(date +%Y%m%d)
> sed "s/yyyymmdd/${today}/g" abc.fil
o/p: 20150127.xyz.doc
20150127.mno.dat
abc.txt
Eu tenho um arquivo abc.fil
cujo conteúdo está no formato yyyymmdd.xyz.doc
. Eu quero cat
esse arquivo abc.fil
tal que eu recebo a saída como 20150127.xyz.doc
. Alguém por favor pode me ajudar a resolver esse problema?
Arquivo de amostra:
$ cat abc.fil
o/p: yyyymmdd.xyz.doc
yyyymmdd.mno.dat
abc.txt
Saída esperada: em vez de yyyymmdd
, quero que a data atual seja exibida na mesma ordem.
> today=$(date +%Y%m%d)
> sed "s/yyyymmdd/${today}/g" abc.fil
o/p: 20150127.xyz.doc
20150127.mno.dat
abc.txt
Você pode usar sed
:
sed "s/yyyymmdd/$(date '+%Y%m%d')/g" abc.fil
Substitui a string yyyymmdd
pela data atual formatada como desejado.
Editar:
Se yyyymmdd
for apenas o formato da data que você deseja substituir, use esse comando (assume o GNU sed
):
sed -r "s/[12][0-9]{3}[01][0-9][0-3][0-9]/$(date '+%Y%m%d')/g" abc.fil
O padrão de expressão regular longa significa o seguinte: O primeiro dígito pode ser 1 ou 2 ( [12]
), os próximos três podem ser tudo de 0 a 9 ( [0-9]
), esse é o ano. Agora o mês: o primeiro dígito pode ser 0 ou 1 e o segundo pode ser tudo de 0 a 9 ( [01][0-9]
). E finalmente o mesmo com o dia.
tente
cat abc.fil | sed s/yyyymmdd/'date +%Y%m%d'/
Tags text-processing date