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

Я хочу заменить в этой строке Wed Apr 10 06:44:10 UTC 2019 все пробелы с запятой и вместе с этим обрезанная часть UTC .

Что я пробовал:

var1="Wed Apr 10 06:44:10 UTC 2019"
echo ${var// /,}

Это удаляет все пробелы, но как обрезать часть UTC, я хочу добиться этого с помощью однострочной команды.

1
задан 10 April 2019 в 11:33
3 ответа

Если вы просто хотите изменить существующую строку и удалить «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
1
ответ дан 3 December 2019 в 17:32

IMHO Обычно обработка даты / времени работает лучше, когда вы обрабатываете строку времени как time , а не строку текст .

Используйте параметры форматирования команды date , чтобы получить метку времени для отображения в желаемом форматировании, и выполните что-нибудь вроде:

var1="Wed Apr 10 06:44:10 UTC 2019"
date --date="$var1" +%Y,%m,%d  

, и вы можете, например, также убедиться, что компонент дня «Среда, 9 апреля» добавляется к 09 и т. Д.

3
ответ дан 3 December 2019 в 17:32

«Опасно, Уилл Робинсон!»

Хотя это не сразу очевидно, обратите внимание на это:

Если часовой пояс на машине изменится , то , внезапно дата больше не в 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!
                    ^^^                               ^^^

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

0
ответ дан 3 December 2019 в 17:32

Теги

Похожие вопросы