Есть список, отсортированных по алфавиту, имен.
Нужно отобразить список с начала списка и до определенного имени.
Нужно отобразить список начиная с определенного имени и до конца.
> Есть список, отсортированных по алфавиту, имен.
> Нужно отобразить список с начала списка и до определенного имени.
> Нужно отобразить список начиная с определенного имени и до конца.Отсюда:
http://stackoverflow.com/questions/7103531/how-to-get-the-pa...1. С начала и до определенного имени (включительно):
sed -n -e '1,/Vasiliy/p' filename.txt
2. С начала и до определенного имени (не включая это имя):
sed -e '/Vasiliy/,$d' filename.txt
3. С определенного имени (включительно) и до конца:
sed -n -e '/Vasiliy/,$p' filename.txt
4. С определенного имени (не включая это имя) и до конца:
sed -e '1,/Vasiliy/d' filename.txt
>> Есть список, отсортированных по алфавиту, имен.
>> Нужно отобразить список с начала списка и до определенного имени.
>> Нужно отобразить список начиная с определенного имени и до конца.
> Отсюда:
> http://stackoverflow.com/questions/7103531/how-to-get-the-pa...О, годные ответы.
Но!
#ls
формирует список с разделителем табулятор.А,
#ls | sed -n -e '1,/hack/p'
формирует список с разделителем конец строки...
>[оверквотинг удален]
>> http://stackoverflow.com/questions/7103531/how-to-get-the-pa...
> О, годные ответы.
> Но!
> #ls
>
> формирует список с разделителем табулятор.
> А,
> #ls | sed -n -e '1,/hack/p'
>
> формирует список с разделителем конец строки...По вашему вопросу было непонятно, что это список имен файлов. То что я предположил -- что это список имен людей, находящихся в одном файле.
Если задача в том, чтобы отформатировать список файлов, то приведенное выше решение тоже подходит. Проблема с выводом "ls" решается так:
ls -1 | sed -n -e '1,/hack/p'
при чем аргумент "ls" это "1" (единица), а не "l" (эл).
> Если задача в том, чтобы отформатировать список файлов, то приведенное выше решение
> тоже подходит. Проблема с выводом "ls" решается так:
>
> ls -1 | sed -n -e '1,/hack/p'
>
> при чем аргумент "ls" это "1" (единица), а не "l" (эл).Не работает. Уточните свой uname -a.
>> Если задача в том, чтобы отформатировать список файлов, то приведенное выше решение
>> тоже подходит. Проблема с выводом "ls" решается так:
>>
>> ls -1 | sed -n -e '1,/hack/p'
>>
>> при чем аргумент "ls" это "1" (единица), а не "l" (эл).
> Не работает. Уточните свой uname -a.
Linux joe-pc 3.10-2-amd64 #1 SMP Debian 3.10.7-1 (2013-08-17) x86_64 GNU/Linux
не думаю, что версия ядра тут как-то могла повлиять.Вот пример моего вывода:
$ cd /sys
$ ls -1 | sed -n -e '1,/kernel/p'выводит все имена до "kernel":
block
bus
class
dev
devices
firmware
fs
hypervisor
kernel
Проверьте у себя этот пример для начала.Суть в том, что вам нужно вывести все имена файлов в столбик. Проверьте просто команду "ls -1".
Из "man ls":
-1 list one file per line
Если у вас по какой-то причине не работает "ls -1", попробуйте так:
$ ls | sed 's/\t/\n/g'
но это некрасивое решение.
>[оверквотинг удален]
> bus
> class
> dev
> devices
> firmware
> fs
> hypervisor
> kernel
>
Мне желательно сделать вывод в одно строку, но с разделителем табулятор.
Вывод "list one file per line" ломает немного логику цикла, его нужно будет переделать
>[оверквотинг удален]
>> devices
>> firmware
>> fs
>> hypervisor
>> kernel
>>
>> Проверьте у себя этот пример для начала.
> Мне желательно сделать вывод в одно строку, но с разделителем табулятор.
> Вывод "list one file per line" ломает немного логику цикла, его нужно
> будет переделатьТогда можно просто в полученном выводе, содержащем перенос строки в качестве разделителя, заменить этот разделитель на табуляцию с помощью команды
tr '\n' '\t'Например так (выполнять в каталоге /sys):
ls -1 | sed -n -e '1,/kernel/p' | tr '\n' '\t'
Надо заметить, что такая команда заменяет также последний перенос строки, и приглашение ввода будет начинаться на результирующей строке. Чтобы избежать этого, можно просто выполнить echo:
ls -1 | sed -n -e '1,/kernel/p' | tr '\n' '\t' ; echo
Таким образом, все команды из моего первого сообщения всё еще применимы для вашего случая, просто нужно производить вывод файлов с переносом строки после каждого файла (ls -1), и после выборки приводить форматирование текста в нужный вам вид (например как показано выше с помощью команды tr).
>[оверквотинг удален]
>
> ls -1 | sed -n -e '1,/kernel/p' | tr '\n' '\t'
>
> Надо заметить, что такая команда заменяет также последний перенос строки, и приглашение
> ввода будет начинаться на результирующей строке. Чтобы избежать этого, можно просто
> выполнить echo:
>
> ls -1 | sed -n -e '1,/kernel/p' | tr '\n' '\t' ;
> echo
>Благодарю. После восстановления дискового массива я применю скрипт и отпишусь.
>> Есть список, отсортированных по алфавиту, имен.
>> Нужно отобразить список с начала списка и до определенного имени.
>> Нужно отобразить список начиная с определенного имени и до конца.
> Отсюда:
> http://stackoverflow.com/questions/7103531/how-to-get-the-pa...
> 1. С начала и до определенного имени (включительно):
>
> sed -n -e '1,/Vasiliy/p' filename.txt
>Еще надо:
5. С начала и до определенного имени (включительно) + N следующих строк:
>> Есть список, отсортированных по алфавиту, имен.
>> Нужно отобразить список с начала списка и до определенного имени.
>> Нужно отобразить список начиная с определенного имени и до конца.
> Отсюда:
> http://stackoverflow.com/questions/7103531/how-to-get-the-pa...
> 1. С начала и до определенного имени (включительно):
>
> sed -n -e '1,/Vasiliy/p' filename.txt
>Не корректно работает.
Идет построчное дублирование.