URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5670
[ Назад ]

Исходное сообщение
"выборка"

Отправлено испытатель , 28-Авг-06 17:49 
подскажите пожалуйста я чайник в этом деле, задаю команду для выборки в вой скрипт на bash
sed -n '$p' //mirror_ext/oracle/BUD/sapbackup/backBUD.log

она выводит
bdtjaxyx afd  2006-08-27 00.00.51  2006-08-27 02.26.27  0         5.3286:1  ALL          offline_force   disk             a--k-c 6.10 (86)

мне нужно только - bdtjaxyx

Задаю
sed -n '$p' '/^.([a-z]{8})/p' //mirror_ext/oracle/BUD/sapbackup/backBUD.log

получаю
Can't open /^.([a-z]{8})/p

Подскажите что не так....


Содержание

Сообщения в этом обсуждении
"выборка"
Отправлено phpcoder , 29-Авг-06 07:31 
а cut -f' ' -f1 не подойдет?


"выборка"
Отправлено испытатель , 29-Авг-06 10:15 
>а cut -f' ' -f1 не подойдет?
Да тоже самое, я говорю о том как первое слово выбрать, дело в том что с постоянными переменными еще плохо знаю синтаксис...

пишу, а результат тот же Can't open [a-z]{8}

sed -n '$p' \[a-z]\{8\}



"выборка"
Отправлено испытатель , 29-Авг-06 10:21 
проще говоря мне нужно выбрать первые 8 символов



"выборка"
Отправлено allez , 29-Авг-06 11:39 
>проще говоря мне нужно выбрать первые 8 символов

Ну так не мучайтесь с sed'ом, используйте cut, как вам уже говорил phpcoder, или awk:
Правда в примере phpcoder'a имеется опечатка:
>cut -f' ' -f1
Надо бы писать так: cut -d' ' -f1 //mirror_ext/oracle/BUD/sapbackup/backBUD.log (таким
образом вы установите пробел в качестве разделителя полей и выберете первое поле).

Можете также использовать следующие конструкции:
$ cut -c 1-8 //mirror_ext/oracle/BUD/sapbackup/backBUD.log # Вырезаются первые 8 символов
$ awk '{print $1}' //mirror_ext/oracle/BUD/sapbackup/backBUD.log # Вырезается первое поле

P.S. Кстати, а "постоянные переменные" - это что? :-)


"выборка"
Отправлено phpcoder , 29-Авг-06 11:55 
>Можете также использовать следующие конструкции:
>$ cut -c 1-8 //mirror_ext/oracle/BUD/sapbackup/backBUD.log # Вырезаются первые 8 символов

Эта инструкция даже будет получше моей, т.к. заточена на 8 символов. Просто автор не точно описал нужное задание.

Вообще, sed очень тяжелый инструмент. awk работает много быстрее, а cut для данной задачи самый быстрый вариант.



"выборка"
Отправлено regunkov , 29-Авг-06 12:03 
>>Можете также использовать следующие конструкции:
>>$ cut -c 1-8 //mirror_ext/oracle/BUD/sapbackup/backBUD.log # Вырезаются первые 8 символов
>
>Эта инструкция даже будет получше моей, т.к. заточена на 8 символов. Просто
>автор не точно описал нужное задание.
>
>Вообще, sed очень тяжелый инструмент. awk работает много быстрее, а cut для
>данной задачи самый быстрый вариант.

Может ты прав по скорости, я не знаю. Но если надо sed'ом, то я бы сделал так.

$echo -E "bdtjaxyx afd  2006-08-27 00.00.51  2006-08-27 02.26.27  0         5.3286:1  ALL          offline_force   disk             a--k-c 6.10 (86)" |
sed -n -e 's/^\([^ ]*\).*/\1/p'

bdtjaxyx


"выборка"
Отправлено regunkov , 29-Авг-06 12:25 
>>>Можете также использовать следующие конструкции:
>>>$ cut -c 1-8 //mirror_ext/oracle/BUD/sapbackup/backBUD.log # Вырезаются первые 8 символов
>>
>>Эта инструкция даже будет получше моей, т.к. заточена на 8 символов. Просто
>>автор не точно описал нужное задание.
>>
>>Вообще, sed очень тяжелый инструмент. awk работает много быстрее, а cut для
>>данной задачи самый быстрый вариант.
>
>Может ты прав по скорости, я не знаю. Но если надо sed'ом,
>то я бы сделал так.
>
>$echo -E "bdtjaxyx afd  2006-08-27 00.00.51  2006-08-27 02.26.27  0
>        5.3286:1  ALL
>         offline_force  
> disk          
>   a--k-c 6.10 (86)" |
>sed -n -e 's/^\([^ ]*\).*/\1/p'
>
>bdtjaxyx

Я и не заметил, что идет привязка именно к первым 8 символам. Тогда можно так.
echo -E "bdtjaxyx afd  2006-08-27 00.00.51  2006-08-27 02.26.27  0         5.3286:1  ALL          offline_force   disk             a--k-c 6.10 (86)" | sed -n -e 's/^\([[:alnum:]]\{8\}\).*/\1/p'


"выборка"
Отправлено испытатель , 29-Авг-06 12:54 
Спасибо всем откликнувшемся!!!! буду разбираться...