Заменить формат метки времени в файле

Проблема заключается в том, что в Bash каждая команда имеет только один код выхода. Когда вы export foo="$(false)"код выхода falseпросто отбрасывается. Если вы вместо этого сделаете

foo="$(false)"
export foo

можно отреагировать на неудачную первую команду, например, с помощью настройки errexit.

Объявление и присвоение строкового литерала, такого как export foo='bar', конечно, не страдает от этой проблемы. Но изменение — это единственная постоянная в разработке программного обеспечения, и это просто хорошая хозяйственная работа, чтобы в будущем -подтвердить такие заявления, разбив их на части.

В дополнение к конкретным командам назначения, которые вы упомянули, есть также несколько команд в одном назначении, например foo="$(false)$(true)". См.pipefailв man bashдля еще одной такой ловушки.

Следует также помнить, что последовательность объявления и присваивания иногда имеет значение. Например, вы захотите объявить переменныеlocalдо их назначения. (К сожалению, невозможно объявить переменныеreadonlyдо их первого назначения.)

0
09.03.2020, 18:55
1 ответ
sed -e 's/T/ /' -e 's/Z//' file

или, что то же самое,

sed 's/T/ /; s/Z//' file

Это сначала заменяет первый символ Tв каждой строке файла пробелом, а затем удаляет первое вхождение Z. Это преобразовало бы

'2020-03-07T14:42:36Z UTC [ db=dev user=rdsdb pid=16913 userid=1 xid=5326 ]' LOG: SET statement_timeout TO 120000

в

'2020-03-07 14:42:36 UTC [ db=dev user=rdsdb pid=16913 userid=1 xid=5326 ]' LOG: SET statement_timeout TO 120000

Перенаправление в новый файл для сохранения данных. Если вы хотите отредактировать -место в файле, сначала убедитесь, что редактирование выполняется правильно. (команда предполагает, что будет не больше и не меньше ровно одной такой метки времени для каждого файла. строку ), то вы можете использовать sed -i, чтобы изменить файл на месте.

0
28.04.2021, 23:21

Теги

Похожие вопросы