Одним из возможных решений является просмотр выходных данных pstree
. При запуске внутри оболочки, созданной из vi
, часть дерева, в которой перечислены pstree
, должна показать вам, насколько глубоко вы находитесь. Например:
$ pstree <my-user-ID>
...
├─gnome-terminal-─┬─bash───vi───sh───vi───sh───pstree
...
Для вашего примера файла вы можете просто
cut -d / -f3 file
Если вы хотите перебрать эти даты, переведите их в цикл:
cut -d / -f3 file |
while read year; do ...
или просто используйте , прочтите
и разделите на пользовательском значении IFS
;
while IFS=/ read -r mm dd yyyy; do
: do something with "$yyyy"
done <file
Поскольку даты представлены в американском формате "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
и т.п.) описаны в руководстве GNU date
.
Форматы ввода, обрабатываемые GNU date
, описаны в руководстве GNU coreutils.
Попробуйте 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
sed -e 's|.*/||' input_file
grep -oP '(?:^|\h)(?:\d\d?/){2}\K\d{4}(?=\h|$)' input_file
Используя grep
с поддержкой PCRE
, это можно сделать, как показано, когда в вашем файле input_file есть одна или несколько строк типа даты на строку.
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
делает все допустимые замены.