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

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

Отправлено Naiv , 27-Май-04 16:49 
Подскажите, пожалуйста, как в shell при помощи стандартных утилит grep, tr, sed
1) из строки вернуть символы, начиная с n-го символа по k-й;
2) частный случай - первые n символов;
3) вернуть символы начиная с первого найденного символа NNh и заканчивая первым найденным символом KKh.

и еще: правильно я понимаю, что утилитой sed можно выполнить все те же функции, что и утилитами grep, tr ?


Содержание

Сообщения в этом обсуждении
"редактирование текста"
Отправлено vnp , 27-Май-04 22:08 
>Подскажите, пожалуйста, как в shell при помощи стандартных утилит grep, tr, sed
>
>1) из строки вернуть символы, начиная с n-го символа по k-й;

sed -e "s/\(.\{$k\}\).*/\1/" -e "s/.\{$n\}\(.*\)/\1/"

>2) частный случай - первые n символов;

sed -e "s/\(.\{$n\}\).*/\1/"

>3) вернуть символы начиная с первого найденного символа NNh и заканчивая
>первым найденным символом KKh.

sed -e "s/[^"$'\xNN'"]*\("$'\xNN'"[^"$'xKK'"]*"$'xKK'"\).*/\1/"

>и еще: правильно я понимаю, что утилитой sed можно выполнить все те
>же функции, что и утилитами grep, tr ?



"редактирование текста"
Отправлено WaprOld , 28-Май-04 02:00 
>>Подскажите, пожалуйста, как в shell при помощи стандартных утилит grep, tr, sed
>>1) из строки вернуть символы, начиная с n-го символа по k-й;
А если не пользоваться sed-ом? ;-)

1. например в bash-е
n=3
Line="Строка"
rock=${Line:2:$n}

>>2) частный случай - первые n символов;
2. там-же
Line="Строка"
Lin=${Line:0:$n}

3. сразу не соображу, но подозреваю что тоже можно.


"редактирование текста"
Отправлено Naiv , 28-Май-04 19:01 
>>Подскажите, пожалуйста, как в shell при помощи стандартных утилит grep, tr, sed
>>
>>1) из строки вернуть символы, начиная с n-го символа по k-й;
>
>sed -e "s/\(.\{$k\}\).*/\1/" -e "s/.\{$n\}\(.*\)/\1/"
>
>>2) частный случай - первые n символов;
>
>sed -e "s/\(.\{$n\}\).*/\1/"
>
>>3) вернуть символы начиная с первого найденного символа NNh и заканчивая
>>первым найденным символом KKh.
>
>sed -e "s/[^"$'\xNN'"]*\("$'\xNN'"[^"$'xKK'"]*"$'xKK'"\).*/\1/"
>
>>и еще: правильно я понимаю, что утилитой sed можно выполнить все те
>>же функции, что и утилитами grep, tr ?

спасибо большое! работает.
есть еще несколько вопросов:

1) как с помощью sed узнать количество строк в файле?
2) как с помощью sed вернуть порядковый номер строки, в которой впервые встречается образец 'text'?


"редактирование текста"
Отправлено Naiv , 01-Июн-04 16:32 
1) как с помощью sed узнать количество
строк в файле?
2) как с помощью sed вернуть порядковый
номер строки, в которой впервые
встречается образец 'text'?



"редактирование текста"
Отправлено vnp , 01-Июн-04 22:21 
>1) как с помощью sed узнать количество
>строк в файле?

sed -n -e '$='

>2) как с помощью sed вернуть порядковый
>номер строки, в которой впервые
>встречается образец 'text'?

sed -n -e '/text/=' -e '/text/q'

А вообще-то, rtfm.