Я хочу заменить в этой строке Wed Apr 10 06:44:10 UTC 2019
все пробелы с запятой и вместе с этим обрезанная часть UTC
.
Что я пробовал:
var1="Wed Apr 10 06:44:10 UTC 2019"
echo ${var// /,}
Это удаляет все пробелы, но как обрезать часть UTC, я хочу добиться этого с помощью однострочной команды.
Если вы просто хотите изменить существующую строку и удалить «UTC 2019» или «UTC»:
# remove "UTC 2019"
$ echo ${var1/UTC*}|tr ' ' ,
Wed,Apr,10,06:44:10
# store the result in a variable
$ var2=$(echo ${var1/UTC*}|tr ' ' ,)
# remove "UTC"
$ echo ${var1/UTC}|tr ' ' ,
Wed,Apr,10,06:44:10,2019
IMHO Обычно обработка даты / времени работает лучше, когда вы обрабатываете строку времени как time , а не строку текст .
Используйте параметры форматирования команды date
, чтобы получить метку времени для отображения в желаемом форматировании, и выполните что-нибудь вроде:
var1="Wed Apr 10 06:44:10 UTC 2019"
date --date="$var1" +%Y,%m,%d
, и вы можете, например, также убедиться, что компонент дня «Среда, 9 апреля» добавляется к 09
и т. Д.
«Опасно, Уилл Робинсон!»
Хотя это не сразу очевидно, обратите внимание на это:
Если часовой пояс на машине изменится , то , внезапно дата больше не в UTC, поэтому любой код, который вы можете написать для удаления прозвища «UTC», ничего не сделает, и вы останетесь с дополнительным значением в вашем результате это нарушит вашу логику ниже по течению.
Wed Apr 10 06:44:10 UTC 2019 -> Wed,Apr,10,06:44:10,2019 OK
Wed Apr 10 11:22:18 BST 2019 -> Wed,Apr,10,11:22:18,BST,2019 Oops!
^^^ ^^^
Как говорили другие, форматируйте дату более предсказуемым образом.