如何從日期中提取年份 (mm/dd/yyyy)

如何從日期中提取年份 (mm/dd/yyyy)

如何從 mm/dd/yyyy 格式的日期中提取年份?

我有一個文字文件,其中包含以下日期:

01/01/2001
05/16/1970
06/08/2010

如何使用 sed 從這些日期中僅提取年份?

答案1

嘗試一下sed,像這樣:

cat file | sed 's/[0-1][0-9]\/[0-3][0-9]\/\([12][0-9][0-9][0-9]\)/\1/g' > newfile

它將讀取您調用的文件file並將結果寫入新文件newfile(根據需要替換)。

如果你想收集年份,你可以做類似的事情

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

答案2

echo "01/01/2001 05/16/1970 06/08/2010" > datefile
sed 's:[0-1][0-9]/[0-3][0-9]/::g' datefile

結果:2001 1970 2010

當所有日期都在一行上以及每個日期都在其自己的行上時,這都適用。分隔符號是:為了幫助清晰度。全域g選項進行所有有效的替換。

答案3

由於日期採用美國“MM/DD/YYYY”格式,因此可以直接在包含日期的date文件上使用 GNU:dates

$ date -f dates "+%Y"
2001
1970
2010

您可以進行更精美的格式化,例如

$ 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

GNU 手冊中描述了格式化序列(%Y等等)date

GNU 處理的輸入格式date描述於GNU coreutils 手冊

答案4

awk

awk -F'/' '{print $3}' textfile

相關內容