如何从 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