Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ редактор SED

Автор: Тёмный Эльф 21.10.2007 21:12

Есть такая функция в Shell - ls которая выводит содержимое текущего каталога (и можно добавить различные опции сортировки). Вроде можно и без SED прекрасно обойтись, но по заданию надо чтобы "программа выводила на экран содержимое текущего каталога в алфавитном порядке и упорядоченное по времени создания/файлов с использованием редактора SED". blink.gif Поэтому думаю надо сделать, чтобы в файл выводились результаты работы ls (упорядоченное по времени создания файлов), а потом этот файл будет отсортирован с помощью SED (в алфавитном порядке). Вот не знаю только есть ли функция сортировки в SED или ее самой нужно написать будет? wink.gif

Автор: xds 21.10.2007 21:42

Наверное, наоборот. ls по умолчанию сортирует по алфавиту. Её вывод надо пересортировать SEDом.

Вообще, даты сортировать сложнее, поэтому я за твой вариант smile.gif

ls -lt | sed -E "s/^(total [0-9]+)$//;s/^(([^ ]+ +){8})(.*)/\3 \1/" | sort | sed -E "s/(.*)((( +[^ ]+){8} +))$/\3\1/"

Сортирует тут sort, а sed используется для того, чтобы перенести имена файлов в начало строки и вернуть их после сортировки в начальное положение.

Автор: Тёмный Эльф 23.10.2007 3:49

Код
ls -lt | sed -E "s/^(total [0-9]+)$//;s/^(([^ ]+ +){8})(.*)/\3 \1/" | sort | sed -E "s/(.*)((( +[^ ]+){8} +))$/\3\1/"

Если загнать этот код в исполняемый файл и запустить его, то выдает ошибку "Invalid reference \3 on `s`" . Почему так?

Автор: xds 23.10.2007 20:42

У меня все работает. Может отличается формат вывода ls? Можешь показать, что выводится по ls -lt?

Автор: Тёмный Эльф 23.10.2007 22:57

Цитата(xds @ 23.10.2007 17:42) *

Можешь показать, что выводится по ls -lt?


Ввожу в командной строке от имени пользователя root команду ls -lt
Выводит
-rw-r--r-- 1 root root 111 Окт 23 00:45 prog3.sh
-rw-r--r-- 1 root root 117 Окт 21 21:24 prog3.sh~
и т.д.
Т.е. упорядоченное по времени создания файлов