Я думаю, что размещение года может быть проблемой. Пока это не удается:
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)
В 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
С помощью 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; }'
С Perl
мы можем сделать это следующим образом:
$ perl -lne 'print /([a-z]+-\d+)/i' file
выход:
HR-1
HR-2
HR-3
Cov-4