sed -i "1i$(stat -c %y test.txt | sed -r 's/\.[0-9]+ / /')" test.txt
Eu tenho o seguinte comando que estou tentando ajustar:
stat -c %y test.txt | sed 's/^\([0-9\-]*\)//'
Isso retorna as seguintes informações:
2016-08-03 14:52:24.000000000
Eu preciso ajustar isso para que exclua o ".000000000". Eu tentei algumas opções diferentes, mas não consigo acertar. Por fim, preciso pegar o registro de data e hora que eu extraio do comando acima e fazer o eco como a primeira linha no arquivo.
Eu tenho este comando como um exemplo que parece adicionar corretamente uma nova linha ao topo do arquivo:
sed -i '1s/^/this should be a date\n/' test.txt
Como eu combino os dois comandos?
sed -i "1i$(stat -c %y test.txt | sed -r 's/\.[0-9]+ / /')" test.txt
Assim:
( stat -c %y test_file.txt | awk -F '.' '{print }' ; cat test_file.txt ) > /tmp/temp_file && mv /tmp/temp_file test_file.txt
Aqui está uma pequena demonstração:
$> echo "Hello World" > test_file.txt
$> ( stat -c %y test_file.txt | awk -F '.' '{print }' ; cat test_file.txt ) > /tmp/temp_file &&
> mv /tmp/temp_file test_file.txt
$> cat test_file.txt
2016-08-03 09:24:27
Hello World
Explicação:
(...)
stat -c %y test_file.txt | awk -F '.' '{print }'
trimps timestamp cat test_file.txt
lê o conteúdo do arquivo. /tmp/temp_file
/tmp/temp_file
Que tal usar ed
em vez de sed
?
$ ed -s test.txt << EOF
0r !stat -c \%y %
1 s/\.[0-9]*//
w
q
EOF
Isso diz:
stat -c \%y %
e insira-o na posição 0 no buffer, ou seja, antes da primeira linha. Observe que, em ed
, um un escapou de %
é uma abreviação do arquivo atual. O -s
é opcional - apenas impede que ed
emita contagens de linha. Se stat
anexar um deslocamento de fuso horário em seu idioma / fuso horário e você quiser removê-lo também, você poderá modificar o comando s
para remover o período e tudo o que o segue, por ex. s/\..*//
Também é possível usar ed
em um one-liner, recebendo seus comandos da entrada padrão usando echo
ou printf
, embora seja um pouco difícil obter o escape certo:
printf '0r !stat -c \%%y %%\n1 s/\.[0-9]*//\nw\nq' | ed -s test.txt
Tags command-line bash sed