Я хочу заменить в этой строке Wed Apr 10 06:44:10 UTC 2019
все пробелы с запятой и вместе с этим обрезать UTC
часть.
Что я пробовал:
var1="Wed Apr 10 06:44:10 UTC 2019"
echo ${var// /,}
Это удаляет все пробелы, но как обрезать часть UTC, я хочу добиться этого с помощью одной команды.
IMHO Обычно манипуляции с датой / временем работают лучше, когда вы обрабатываете строку времени как время а не текст строка.
Используйте параметры форматирования date
команда, чтобы получить метку времени для отображения в желаемом форматировании, и выполнить что-то вроде:
var1="Wed Apr 10 06:44:10 UTC 2019"
date --date="$var1" +%Y,%m,%d
и вы можете, например, также убедиться, что компонент дня "среда, 9 апреля" дополнен до 09
и т.п.
Если вы просто хотите изменить существующую строку и удалить «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
"Опасно, Уилл Робинсон!"
Хотя это не сразу очевидно, обратите внимание на это:
Если часовой пояс на машине изменения затем, внезапно, свидание не в 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!
^^^ ^^^
Как говорили другие, форматируйте дату более предсказуемым образом.