Назад | Перейти на главную страницу

обработка текста в Linux с использованием grep awk или чего-то еще

Я хочу заменить в этой строке 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!
                    ^^^                               ^^^

Как говорили другие, форматируйте дату более предсказуемым образом.