Analysera ett datum från en sträng

Bash:
Analysera ett datum från en sträng

Hur:

Bash i sig är ganska begränsat i direkt datumtolkningsförmåga, och förlitar sig ofta på externa verktyg som date och awk för mer sofistikerad manipulation. Här är hur du kan tolka ett specifikt format och sedan använda det med date-kommandot för att konvertera det eller utföra operationer.

Exempel 1: Extrahera en datumsträng och konvertera den till ett annat format.

Antag att du har ett datum i formatet yyyy-mm-dd och du vill konvertera det till dd-mm-yyyy.

original_date="2023-04-01"
formatted_date=$(date -d $original_date '+%d-%m-%Y')

echo $formatted_date

Exempel på utdata:

01-04-2023

Detta använder date-kommandot med -d-alternativet för att specificera datumsträngen som input, och +%d-%m-%Y för att formatera utdatan.

Exempel 2: Använda awk för att tolka ett datum från en strukturerad textlinje och konvertera det.

Antag att du har en loggfilsrad:

2023-04-01 12:00:00 Användare loggade in

Du kan extrahera och konvertera datumdelen med hjälp av awk och date.

log_line="2023-04-01 12:00:00 Användare loggade in"
date_part=$(echo $log_line | awk '{print $1}')
formatted_date=$(date -d $date_part "+%A, %B %d, %Y")

echo $formatted_date

Exempel på utdata:

Lördag, April 01, 2023

Detta exempel använder awk för att dela loggraden och extrahera datumdelen ($1 representerar det första fältet avgränsat av mellanslag), och sedan används date för att omformatera det.

Använda tredjepartverktyg

För mer komplex tolkning eller när man hanterar en mängd olika datumformat, kan tredjepartverktyg som dateutils vara mycket praktiska.

Exempel med dateutils:

Antag att du har en datumsträng i ett icke-standardformat, till exempel, April 01, 2023.

original_date="April 01, 2023"
formatted_date=$(dateconv -i "%B %d, %Y" -f "%Y-%m-%d" <<< $original_date)

echo $formatted_date

Exempel på utdata:

2023-04-01

Detta kommando använder dateconv från dateutils, specifierar inputformatet med -i och det önskade outputformatet med -f. dateutils stöder ett brett utbud av datum- och tidsformat, vilket gör det mycket mångsidigt för datumtolkningsuppgifter i Bash-skript.