Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / выделение подстроки... (( / 25 сообщений из 25, страница 1 из 1
06.09.2006, 18:28
    #33969130
klmntmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
вот пример bash скрипта:
threp="Delirium set of ideas and representations, the conclusion which is arisen not as a result of processing of the acted(arrived) information and not corrected(adjusted) by the acting information (thus it is not important, whether corresponds(meets) the crazy conclusion of the validity or not)";

echo `expr index "$threp" ideas`;
echo $k;

=========
>sh test
2
=========
т.е. он ищет не слово в буквы!!!
как сдлеать поиск слова?
....
а вообще хотелось бы вырезать подстроку между словами "ideas" и "crazy "
но если он будет выдавать начальные позиции этих слов то дальше думаю не проблемма...
help!)
...
Рейтинг: 0 / 0
06.09.2006, 18:55
    #33969211
DarkSquid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
Код: plaintext
1.
2.
echo $threp | sed -e 's/^.*ideas//
s/crazy.*$//'
...
Рейтинг: 0 / 0
06.09.2006, 19:46
    #33969294
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
на самом деле в linux ля выделения подстроки expr
просто imho Вы немного неправильно юзаете.


Код: plaintext
expr match "$threp" ".*\(idea\)"
...
Рейтинг: 0 / 0
06.09.2006, 20:16
    #33969334
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
к этой задаче можно еще немного по-другому sed-ом, чем пример DarkSquid

Код: plaintext
echo $threp | sed -e "s/\(.*ideas\)\(.*\)\(crazy.*\)/\2/"

Код: plaintext
expr match "$threp" ".*ideas\(.*\)crazy"

но все же imho expr выглядит покороче. Жаль, что расширение для работы со строками expr нестандартно и есть не везде.
...
Рейтинг: 0 / 0
07.09.2006, 11:10
    #33970087
klmntmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
всем спасибо!!!
...
Рейтинг: 0 / 0
07.09.2006, 11:52
    #33970303
klmntmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
и ещё вопрос как найти определённое слово в тексте?
...
Рейтинг: 0 / 0
07.09.2006, 13:20
    #33970690
klmntmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
скрипт:
echo start=$cnstart;
if [ $cnstart!="" ]; then
echo $snstart;
echo startif;
cnend=$cnstart;
echo $cnend;
else
echo " next";
fi
>sh script
start=

startif
=======
и почему он попадает в startif если cnstart пустая???
или как обозначить пустую строку?? null тоже не работает...
...
Рейтинг: 0 / 0
07.09.2006, 13:23
    #33970705
klmntmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
блин да туда что неляпни попадает
echo start=$cnstart;
if [ $cnstart=="sdkfjsdkl" ]; then
echo $snstart;
echo startif;
cnend=$cnstart;
echo $cnend;
else
echo " next";
fi
даж так в if заходит!!!
...
Рейтинг: 0 / 0
07.09.2006, 15:26
    #33971323
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
Обратите внимание на синтаксис

Код: plaintext
 [ "$cnstart" = "sdkfjsdkl" ] 

во-первых стОит использовать просто = а не ==
во-вторых $переменные лучше заключать в кавычки

И наконец - нужны пробелы между оператором и операндами
когда Вы пишете слитно - я так понимаю test - у кажется, что применена унарная форма [ string ], а при этом будет истина всегда если string не пустая
...
Рейтинг: 0 / 0
07.09.2006, 16:06
    #33971507
klmntmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
ясна спасибо!
...
Рейтинг: 0 / 0
07.09.2006, 18:48
    #33972224
klmntmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
блин и ещё вопрос!!
как в bash shelle выглядит символ переноса строки и если он там вообще???
...
Рейтинг: 0 / 0
07.09.2006, 18:52
    #33972231
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
printf "также как и\nвезде"

echo -e "но разные\nкоманды"

echo "его используют\nне всегда" #эта не использует

:-)
...
Рейтинг: 0 / 0
07.09.2006, 19:07
    #33972260
klmntmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
угу спасиб=))
expr match "$threp" ".*ideas\(.*\)crazy"
эт команда вытаскивает то что в последний раз встречатся между этими словами а то что в перый как сделать?)

т.е. ideas lalalal crazy ideas blablaaaa crasy
надо вытащить lalalal
...
Рейтинг: 0 / 0
07.09.2006, 23:32
    #33972578
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
а вот это уже imho непростой вопрос.
насколько я помню, стандартные unix utils не умеют ограничивать жадность квантификаторов

На perl (ну и в других языках с мощными регекспами) это элементарно

echo $threp | perl -ne '/ideas(.*?)crazy/;print "$1\n"'



а вот в чистом shell... простым регекспом пока не придумать
...
Рейтинг: 0 / 0
07.09.2006, 23:45
    #33972588
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
да, я думаю, что на классическом shell можно разве что отмаркировать и дальше уже вытаскивать по номеру как угодно

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
#!/bin/sh

threp="ideas lalalal crazy ideas blablaaaa crazy"
a= 0 

while :
do
 threp=`echo "$threp" |  awk -vN=$a '{i=sub("ideas","III"N);print;exit i}'` && break
 a=`expr $a +  1 `
done

a= 0 
while :
do
 threp=`echo "$threp" |  awk -vN=$a '{i=sub("crazy","ZZZ"N);print;exit i}'` && break
 a=`expr $a +  1 `
done
echo $threp

expr "$threp" : ".*III0\(.*\)ZZZ0"


кстати если кто знает про реализацию ленивости/жадности квантификаторов в unix utils - с удовольствием бы послушал.
...
Рейтинг: 0 / 0
08.09.2006, 01:29
    #33972622
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
как вариант можно попытаться модифицировать какое-нибудь такое,
правда, оно мне кажется не очень универсальным, вариантом с маркировкой проще управлять.

Код: plaintext
echo $threp | sed -e "s/ideas//" -e "s/crazy.*ideas.*crazy//"
...
Рейтинг: 0 / 0
08.09.2006, 08:04
    #33972715
DarkSquid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
klmntmp

т.е. ideas lalalal crazy ideas blablaaaa crasy
надо вытащить lalalal

Код: plaintext
1.
2.
echo $threp | sed -e 's/^.*ideas//
s/crazy.*$//'
...
Рейтинг: 0 / 0
08.09.2006, 08:08
    #33972720
DarkSquid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
DarkSquid klmntmp

т.е. ideas lalalal crazy ideas blablaaaa crasy
надо вытащить lalalal

Код: plaintext
1.
2.
echo $threp | sed -e 's/^.*ideas//
s/crazy.*$//'


Ошибся. То есть, естественно, наоборот:-

Код: plaintext
1.
2.
echo $threp | sed -e 's/crazy.*$//
s/^.*ideas//'
...
Рейтинг: 0 / 0
08.09.2006, 09:25
    #33972848
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
да, с привязкой гораздо круче :-)
...
Рейтинг: 0 / 0
08.09.2006, 10:51
    #33973148
klmntmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
и ещё раз спасибо)
...
Рейтинг: 0 / 0
29.11.2006, 17:45
    #34165081
klmntmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
странная проблемма:
если я в скрипте пишу так:
while read line
do
tom=`echo $line | awk '{print $4}'`;
echo "$tom";
if [ "$tom" = "" ]; then
echo "=========end this==========="
fi
if [ "$tom" != "" ]; then
echo "exist";
fi
done<./klmn.txt

exit 0;

то стабильно пишет exist!
если же самому написать tom="" или tom="klj" то нормально будет воспринимать как строку!
варианты типа tom="`echo $line | awk '{print $4}'`"; или tom="$tom"; не помагает((
...
Рейтинг: 0 / 0
29.11.2006, 18:04
    #34165162
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
ничего не понял :-)
Какие исходные данные в klmn.txt ?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
19.12.2012, 07:00
    #38084435
Patjomkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
Оживлю, чтобы новую тему не создавать.

Доброе время.

Нужно вырезать из строки подстроку (подстроки) заключённую в двойные кавычки (").
Т.е. может быть что то типа:
dgdfdgrfd txt "Substring1" dfgdfgdfgdf gghfgfgf aserser txt "Substring2"
Нужно получить:
"Substring1" "Substring2"

Буду очень признателен любой помощи
...
Рейтинг: 0 / 0
13.11.2013, 12:56
    #38463307
ejnadall
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
И еще одно "оживление темы"
Как найти в переменной-строке переменную-подстроку?

Т.е. вот так работает:
Код: powershell
1.
2.
STRING="my text is awesome"
POSITION=`expr index $STRING text`



а вот так не хочет...
Код: powershell
1.
2.
3.
FINDME="text"
STRING="my text is awesome"
POSITION=`expr index $STRING $FINDME`



что не так?
...
Рейтинг: 0 / 0
13.11.2013, 13:14
    #38463339
ejnadall
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение подстроки... ((
короче, index совсем не о том... он ищет первое вхождение не строки а символа
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / выделение подстроки... (( / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]