По большей части Вы не должны устанавливать TERM
вручную. Переменная всегда устанавливается автоматически, и существует только узкое стечение обстоятельств, где значение по умолчанию является неправильным.
Значение TERM
потребности, на которые сошлются в terminfo базе данных системы (или для некоторых старомодная система в termcap базе данных). Terminfo и Termcap отображают терминальные типы на описание терминальных возможностей то использование приложений. Значение TERM
терминальный тип.
Главная причина, почему Вы, возможно, иногда должны были бы измениться TERM
то, если Вы входите в систему удаленно, когда локальная машина и удаленная машина имеют различные терминальные базы данных.
Другая причина, которая связана с предыдущим, состоит в том, что иногда существует несколько подобных записей для терминала с немного отличающимися возможностями. Это имеет тенденцию происходить главным образом, когда новый терминал подходит, который совместим с существующим терминалом, но имеет больше функций. Вы затем получаете выбор между использованием традиционного имени, которое все машины понимают, но которое рекламирует только традиционные функции или более новое имя, которое рекламирует все новые возможности, но которое не поймут некоторые машины.
Примером этого является xterm с 16 цветами по сравнению с xterm с 256 цветами. Традиционный xterm поддерживает только 16 цветов, таким образом, это что xterm
терминальная база данных указывает. Изменение xterm
запись сделала бы пользователей более новых xterm версий счастливыми, но повредит конфигурацию пользователей более старых xterm версий, которые входят в систему удаленно. Переключение на новое имя — xterm-256color
— обеспечивает более новые возможности каждый раз, когда доступно, но не распознан, если Вы входите в систему удаленно машин с более старой терминальной базой данных. Поскольку нет никакого решения, которое может удовлетворить всех, Вы получаете выбор: любая палка с xterm
и не получайте 256 цветов или использование xterm-256color
который не работает, если Вы входите в систему удаленных машин, которые не поддерживают его.
Отъезд значения по умолчанию xterm
и установка termName
ресурс к xterm-256color
(который вызывает переменную среды TERM
быть установленным на то же значение), таким образом оба разумный выбор. Установка TERM
к произвольным значениям не работал бы, но оба xterm
и xterm-256color
имейте смысл.
Было бы возможно использовать SED
для этого, но awk
более естественно:
awk -F'"' -v OFS='"' '$8 {cmd="date -d \""$8"\" +%FT%T%z"; cmd | getline $8; close(cmd)} 1' input.json
{"_id":"","timestamp":"2015-04-20T01:30:55-0700"}
{"_id":"","timestamp":"2015-04-20T01:32:25-0700"}
{"_id":"","timestamp":"2015-04-20T01:35:39-0700"}
Вышеуказанное шоу смещение -7: 00 часы. Это отражает часовой пояс системы системы. Изменение переменной оболочки TZ
изменит по умолчанию.
-F '«-V ofs ='»
. Это устанавливает как входные и выходные сепараторы поля
.
$ 8 {cmd = " Дата -D \ "" $ 8 "\" +% ft% t% z "; cmd | getline $ 8; Закрыть (cmd)}
с «
в качестве сепаратора поля, дата является номером поля 8. Это создает строку с помощью правильной команды дата
, а затем запускает команду, захватывая выходные данные в обновленное поле 8.
$ 8
спереди означает, что эта часть будет только Будьте запуска, если есть непустое значение для поля 8. Это позволяет, например, пустые строки проходить через безмолярные.
1
Это криптичный стенография AWK для «печати этой линии».
, поскольку мы используем »
в качестве сепаратора поля. Предположим, что есть Переменное число »
до временной техники. В этом случае нам нужно обратиться к метку времени в качестве второго полевого поля, $ (NF-1)
, а не восьмое поле, $ 8
. В этом случае:
awk -F'"' -v OFS='"' '$8 {cmd="date -d \""$(NF-1)"\" +%FT%T%z"; cmd | getline $(NF-1); close(cmd)} 1' input.json
$ awk -F'"' -v OFS='"' '$8 {cmd="date -d \""$(NF-1)"\" +%FT%T%z"; cmd | getline $(NF-1); close(cmd);$(NF-1)="{$date:" $(NF-1) "}"} 1' input.json
{"_id":"","timestamp":"{$date:2015-04-20T01:30:55-0700}"}
{"_id":"","timestamp":"{$date:2015-04-20T01:32:25-0700}"}
{"_id":"","timestamp":"{$date:2015-04-20T01:35:39-0700}"}
cat /tmp/what \
| jq '.timestamp' \
| while read line ; do \
node -e "console.log(new Date($line).toISOString())" ;\
done
Может также использовать одну программу Node.js для обработки всего файла для обеспечения производительности, но это может быть слишком далеко в JS-land. (Пинг, если требуется подробная информация.)
Если вы можете гарантировать, что вход отформатирован в точности так, как вы показали,
вы можете сделать это полностью в sed
. Это немного грубовато:
sed \
-e 's/"timestamp":"... Jan/"timestamp":"01/' \
-e 's/"timestamp":"... Feb/"timestamp":"02/' \
-e 's/"timestamp":"... Mar/"timestamp":"03/' \
-e 's/"timestamp":"... Apr/"timestamp":"04/' \
-e 's/"timestamp":"... May/"timestamp":"05/' \
-e 's/"timestamp":"... Jun/"timestamp":"06/' \
-e 's/"timestamp":"... Jul/"timestamp":"07/' \
-e 's/"timestamp":"... Aug/"timestamp":"08/' \
-e 's/"timestamp":"... Sep/"timestamp":"09/' \
-e 's/"timestamp":"... Oct/"timestamp":"10/' \
-e 's/"timestamp":"... Nov/"timestamp":"11/' \
-e 's/"timestamp":"... Dec/"timestamp":"12/' \
-e 's/"timestamp":"\(..\) \(..\) \(..:..:..\) \(.....\) \(....\)"/"timestamp":"\5-\1-\2T\3\4"/' \
input.json > output.json
Он заменяет название месяца на его номер,
а затем он вырезает (сейчас) строку с цифрами даты,
и складывает кусочки обратно в нужном порядке.
Если вы хотите добавить .000
за миллисекунды, вставьте между \3
и \4
.