У меня есть следующая команда, которую я пытаюсь настроить:
stat -c %y test.txt | sed 's/^\([0-9\-]*\)/\1/'
Это возвращает следующую информацию:
2016-08-03 14:52:24.000000000
Я должен настроить это так, чтобы это исключило ".000000000". Я попробовал несколько различных вариантов, но, может казаться, не разбираюсь в нем. В конечном счете я должен взять метку времени, которую я извлекаю из вышеупомянутой команды и повторяю ее как первую строку в файл.
У меня есть эта команда как пример, который, кажется, правильно добавляет новую строку к вершине файла:
sed -i '1s/^/this should be a date\n/' test.txt
Как я комбинирую две команды?
sed -i "1i$(stat -c %y test.txt | sed -r 's/\.[0-9]+ / /')" test.txt
Как так:
( stat -c %y test_file.txt | awk -F '.' '{print $1}' ; cat test_file.txt ) > /tmp/temp_file && mv /tmp/temp_file test_file.txt
Вот маленькая демонстрация:
$> echo "Hello World" > test_file.txt
$> ( stat -c %y test_file.txt | awk -F '.' '{print $1}' ; 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
Объяснение:
(...)
stat -c %y test_file.txt | awk -F '.' '{print $1}'
метка времени trimpscat test_file.txt
содержание файла чтений. /tmp/temp_file
/tmp/temp_file
Как насчет использования ed
вместо sed
?
$ ed -s test.txt << EOF
0r !stat -c \%y %
1 s/\.[0-9]*//
w
q
EOF
Это говорит:
stat -c \%y %
и вставьте его в положении 0 в буфере т.е. перед первой строкой. Отметьте это в ed
, незавершенное %
сокращение от текущего файла. -s
является дополнительным - это просто предотвращает ed
от количеств строки вывода. Если stat
добавляет смещение часового пояса в Вашей локали / часовой пояс, и Вы хотите удалить это также, затем можно изменить s
команда для удаления периода и всего после него, например. s/\..*//
Также возможно использовать ed
в остроте, берущей ее команды от стандартного входного использования echo
или printf
, хотя это немного хитро для разбираний в выходе:
printf '0r !stat -c \%%y %%\n1 s/\.[0-9]*//\nw\nq' | ed -s test.txt