Извлечь первое совпадение в соответствии с sed

Я думаю, что размещение года может быть проблемой. Пока это не удается:

host:~ # date -d 'Thu 16 Jan 15:00:00 UTC 2020' 
date: invalid date ‘Thu 16 Jan 15:00:00 UTC 2020

это работает на моей виртуальной машине:

host:~ # date -d 'Thu 16 Jan 2020 15:00:00 UTC' 
Thu Jan 16 16:00:00 CET 2020

Я добавил формат даты к первому оператору, который работает:

shour=$(date "+%Y%m%d" -d "yesterday 3PM" -u)
ddate="$(date -d "${shour}" -u)"
sdate=$(date "+%Y%m%d" -d "$shour" -u)
0
11.03.2020, 03:55
3 ответа

В GNU awkпопробуйте:

gawk -v FPAT='[A-Za-z]+-[0-9]+' '$1{print $1}' FILE

или:

gawk -v FPAT='[A-Za-z]+-[0-9]+' '$0=$1' FILE
1
28.04.2021, 23:20

С помощью sedпопробуйте:

<FILE sed -En '/([[:alpha:]]+-[0-9]+).*/{ s//:\1/; s/.*://p; }'
  • Удалить все после нужного совпадения
  • Теперь совпадение находится в конце каждой строки — это можно обработать по-разному
    • Вышеизложенное легко читается — поместите char, который не является частью совпадения, перед каждым совпадением, а затем удалите все до последнего charвторой командой s
    • Другой вариант для второй команды s— удалить все до символа, который не является частью совпадения:
<FILE sed -En '/([[:alpha:]]+-[0-9]+).*/{ s//\1/; s/.*[^[:alnum:]-]//; p; }'
1
28.04.2021, 23:20

С Perlмы можем сделать это следующим образом:

$ perl -lne 'print /([a-z]+-\d+)/i' file

выход:

HR-1
HR-2
HR-3
Cov-4
1
28.04.2021, 23:20

Теги

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