.png)
Как извлечь год из даты в формате мм/дд/гггг?
У меня есть текстовый файл, содержащий следующие даты:
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», можно использовать GNU date
непосредственно для файла, 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
Последовательности форматирования ( %Y
и т.п.) описаны в date
руководстве GNU.
Форматы входных данных, обрабатываемые GNU, date
описаны вруководство GNU coreutils.
решение4
С awk
:
awk -F'/' '{print $3}' textfile