Bash:
Analysering av en dato fra en streng
Hvordan:
Bash i seg selv er ganske begrenset i direkte datotolkningsmuligheter, ofte avhenger den av eksterne verktøy som date
og awk
for mer sofistikert manipulasjon. Her er hvordan du kan tolke et spesifikt format og deretter bruke det med date
-kommandoen for å konvertere det eller utføre operasjoner.
Eksempel 1: Uttrække en datostreng og konvertere den til et annet format.
Anta at du har en dato i formatet åååå-mm-dd
og du ønsker å konvertere den til dd-mm-åååå
.
original_dato="2023-04-01"
formatert_dato=$(date -d $original_dato '+%d-%m-%Y')
echo $formatert_dato
Eksempel på utdata:
01-04-2023
Dette bruker date
-kommandoen med -d
-alternativet for å spesifisere inndato-strengen, og +%d-%m-%Y
for å formatere utdata.
Eksempel 2: Bruke awk
for å tolke en dato fra en strukturert tekstlinje og konvertere den.
Anta at du har en loggfillinje:
2023-04-01 12:00:00 Bruker logget inn
Du kan ekstrahere og konvertere datodelen ved å bruke awk
og date
.
logg_linje="2023-04-01 12:00:00 Bruker logget inn"
datodel=$(echo $logg_linje | awk '{print $1}')
formatert_dato=$(date -d $datodel "+%A, %B %d, %Y")
echo $formatert_dato
Eksempel på utdata:
Lørdag, april 01, 2023
Dette eksemplet bruker awk
for å splitte logglinjen og ekstrahere datodelen ($1
representerer det første mellomrom-delt feltet), og deretter brukes date
til å omformatere den.
Bruk av tredjepartsverktøy
For mer kompleks tolkning eller når man har å gjøre med en lang rekke datofortmatter, kan tredjepartsverktøy som dateutils
være veldig nyttig.
Eksempel med dateutils
:
Anta at du har en datostreng i et ikke-standard format, for eksempel, April 01, 2023
.
original_dato="April 01, 2023"
formatert_dato=$(dateconv -i "%B %d, %Y" -f "%Y-%m-%d" <<< $original_dato)
echo $formatert_dato
Eksempel på utdata:
2023-04-01
Denne kommandoen bruker dateconv
fra dateutils
, og spesifiserer inndataformatet med -i
og ønsket utdataformat med -f
. dateutils
støtter et stort utvalg av dato- og tidsformater, noe som gjør det svært allsidig for dato-tolkningsoppgaver i Bash-skript.