В Linux или любой системе, использующей GNUdate
:
$ thedate=2019-08-15
$ date -d "$thedate" +'%B %e, %Y'
August 15, 2019
В macOS, OpenBSD и FreeBSD, где GNU date
недоступен по умолчанию:
$ thedate=2019-08-15
$ date -j -f '%Y-%m-%d' "$thedate" +'%B %e, %Y'
August 15, 2019
Опция -j
отключает настройку системных часов, а строка формата, используемая с -f
, описывает формат ввода даты. (должна быть строкой формата strptime(3)
, описывающей формат, используемый значением вашей переменной ). Затем следует значение вашей переменной, и формат, который вы хотите, чтобы ваш вывод был в (, должен быть строкой форматаstrftime(3)
).
Пользователи NetBSD могут использовать что-то похожее на описанное выше, но без опции -f input_fmt
, так как их реализация date
используетparsedate(3)
. Обратите также внимание на параметр -d
для указания строки ввода даты :
.
$ thedate=2019-08-15
$ date -j -d "$thedate" +'%B %e, %Y'
August 15, 2019
См. также руководство для date
вашей системы.
Вы можете сделать это:
(rm -f foo && yourprogram > foo) < foo
.:
(rm -f foo && wc > foo) < foo
Открывает foo
для чтения. Затем он запускает подоболочку и удаляет узел i -из foo
, оставляя файл открытым. Наконец, он открывает foo
для вывода, создавая таким образом foo
.
Требуется разрешение на запись в каталог, поэтому, если у вас есть разрешение только на запись в файл, вам не повезло.
Это изменит узел i -(, поэтому разрешение, владелец, ctime будут потеряны ), но если важно только имя, все должно быть в порядке.
В отличие от sponge
это работает, даже если результат yourprogram
больше памяти.