.png)
Wie kann ich aus einem Datum im Format tt/mm/jjjj das Jahr extrahieren?
Ich habe eine Textdatei mit den folgenden Daten:
01/01/2001
05/16/1970
06/08/2010
Wie kann ich sed verwenden, um aus jedem dieser Daten nur das Jahr zu extrahieren?
Antwort1
Versuchen Sie sed
es wie folgt:
cat file | sed 's/[0-1][0-9]\/[0-3][0-9]\/\([12][0-9][0-9][0-9]\)/\1/g' > newfile
Dadurch wird Ihre aufgerufene Datei gelesen file
und die Ergebnisse in die neue Datei geschrieben newfile
(nach Bedarf ersetzen).
Wenn Sie die Jahre sammeln möchten, könnten Sie so etwas tun wie
cat file | sed 's/[0-1][0-9]\/[0-3][0-9]\/\([12][0-9][0-9][0-9]\)/\1/g' | tr ' ' \\n | grep . | sort -nu
Antwort2
echo "01/01/2001 05/16/1970 06/08/2010" > datefile
sed 's:[0-1][0-9]/[0-3][0-9]/::g' datefile
Ergebnis:2001 1970 2010
Dies funktioniert sowohl, wenn alle Daten in einer Zeile stehen, als auch, wenn jedes Datum in einer eigenen Zeile steht. Das Trennzeichen dient der :
besseren Verständlichkeit. Die globale g
Option nimmt alle gültigen Ersetzungen vor.
Antwort3
Da die Daten im US-amerikanischen Format „MM/TT/JJJJ“ vorliegen, kann GNU date
direkt auf die Datei angewendet werden dates
, die die Daten enthält:
$ date -f dates "+%Y"
2001
1970
2010
Sie können eine ausgefallenere Formatierung vornehmen, wie
$ date -f dates "+%F is in %Y and is a %A"
2001-01-01 is in 2001 and is a Monday
1970-05-16 is in 1970 and is a Saturday
2010-06-08 is in 2010 and is a Tuesday
Die Formatierungssequenzen ( %Y
und dergleichen) sind im GNU- date
Handbuch beschrieben.
Die von GNU verarbeiteten Eingabeformate date
sind beschrieben indas GNU Coreutils-Handbuch.
Antwort4
Mit awk
:
awk -F'/' '{print $3}' textfile