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_dateExempel på utdata:
01-04-2023Detta 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 inDu 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_dateExempel på utdata:
Lördag, April 01, 2023Detta 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_dateExempel på utdata:
2023-04-01Detta 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.