используя команду sed для замены первых 2-х вхождений ":" внутри строки

I got my intended result by using:

who | sort | tail -n 1
0
18.01.2018, 12:11
3 ответа

Я использовал ниже 2 метода для достижения указанного результата

метод1 с использованием функции awk gsub

echo $date1| awk '{gsub(":","-",$1);print $0}'

выход2018-01-16 12:25:35

Method2 с использованием sed

echo $date1 |sed "s/:/-/"| sed "s/:/-/"

выход2018-01-16 12:25:35

Method3 с использованием perl

echo $date1| perl -pne "s/:/-/"| perl -pne "s/:/-/"

выход2018-01-16 12:25:35

1
28.01.2020, 02:13

Выражения подстановки в sedподдерживают числовой флаг. Вот как это может сделать GNU sed:

sed 's/:/-/g;s/-/:/3g'

Так что здесь происходит? Это выражение состоит из двух частей, разделенных ;. Вот они:

  1. Сначала замените все двоеточия дефисами
  2. Затем замените все дефисы , кроме первых двух , на двоеточия

Как правило, это бесполезно в тех случаях, когда ваша исходная строка содержит дефисы или двоеточия, которые могут мешать, но это работает в вашем примере строки даты -.

Ре. exiftool

Тем не менее, мне интересно, получаете ли вы дату в формате двоеточия -из exiftool, потому что я видел это как формат даты по умолчанию. С помощью exiftoolвы можете просто указать другой формат даты :

.
exiftool -d '%Y-%m-%d %H:%M:%S' some-input-file.jpg

При смешивании sedмодификатора g и числа

Note: the POSIX standard does not specify what should happen when you mix the g and number modifiers, and currently there is no widely agreed upon meaning across sed implementations. For GNU sed, the interaction is defined to be: ignore matches before the numberth, and then match and replace all matches from the numberth on. [source]

1
12.06.2021, 09:29
#!/usr/bin/python
date1="2018:01:16 12:25:35"
bo=date1.split(" ")
jk=bo[0].replace(":","-")
print jk+" "+bo[1]

выход

2018-01-16 12:25:35
0
12.06.2021, 12:55

Теги

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