Страница 1 из 1
скрипт по работе со строками
Добавлено: 2008-06-01 22:37:45
riptor2006
Нужна помошь по написанию програмы на shell под Unix по оброботке строки , которая выполняет действия:
вводит символьную строку;
во введенной строке ищет подстроку, передаваемую в качестве первого параметра;
вставляет после каждой найденной подстроки символ, передаваемый в качестве
второго параметра;
удаляет из полученной строки символ, передаваемый в качестве третьего
параметра;
выводит на экран введенную и новую строку.
проблема как я думаю кроется в участках кода где используется експр и цикл while
буду признателен тем кто поможет исправит существующий код или напишет свой
Код: Выделить всё
if test $# -lt 3
then
echo ОШИБКА неправельное число параметров
exit
fi
orign_arg=$*
echo программа по поиску в ведёной строке другой подстроки введёной в качестве п ервого параметра
echo "Введите исходную строку :"
read str1
###########
#for j in $(seq $('echo $str1|wc -w'))
#do
#tmp=$(echo $str1|cut -d " " -f$j)
#if[$tmp==$3]
#then
#tmp=" "
#fi
#out=$out$tmp
#out=$out
#done]
##########
echo Поиск
# поиск
if echo $str1 | grep $1 > /dev/null
then
end='expr length $1'
#len=$1
#end=$(length (len))
#echo $end dlinna end
beg=1
#echo $beg
#echo начало цикла
while [ $1!='echo $str1 | cut -c $beg-$end' ]
do
#beg awk '/^'
#let beg=$beg+1
#let beg=$beg+1
##end='expr $beg + 1 '
beg=expr($beg + 1)
#echo telo zikla
#let end=$end+1
#let end=$end+1
echo $str1
echo $end
end=expr($end + 1)
done
echo Должна начаться вставка
#вставка
#let beg1=$beg-1
beg1='expr $beg-1'
j='echo $str1 | cut -c $beg1'
k='echo $j$2$k'
echo 'vstavka zaverhena'
else
echo "$1 нет в исходной подстроке"
exit
fi
if echo $k |grep $3 > /dev/null
then
#let end=lenght $3
end= 'expr lenght $3'
beg1=1
while [ $3!='echo $k | cut -c $beg - $beg' ]
do
#let beg=$beg+1
beg='expr $beg+1'
#let end=$end+1
end='expr $end+1'
done
echo идёт удаление
#удаление
#let beg1=$beg-1
beg1='expr $beg - 1'
#let end=$end+1
end= 'expr $end + 1'
j='echo $k | cut -c $beg1'
g='echo $k | cut -c $end'
echo $j$g
echo исходная строка $str1
echo ещё какаято $*
echo result $a
echo rezult $b
else
exit
fi
#cho the enter string : $str1 $str2
Re: скрипт по работе со строками
Добавлено: 2008-06-02 6:16:52
zg
riptor2006 писал(а):Нужна помошь по написанию програмы на shell под Unix по оброботке строки , которая выполняет действия:
по-моему ты изобретаешь sed
дай пример вызова скрипта, который тебе надо получить, например
Код: Выделить всё
#./script.sh исходная_строка .. символ_замены .. и т.д.
Результат работы программы
подставь туда свои реальные значения, ну и результат каким он должен быть и почему
Re: скрипт по работе со строками
Добавлено: 2008-06-02 9:11:19
riptor2006
вот что она делает на данный момент та программа котрую я написал
Код: Выделить всё
$ lab8
ОШИБКА неправельное число параметров
$ lab8 ddd fff gg
программа по поиску в ведёной строке другой подстроки введёной в качестве первого параметра
Введите исходную строку :
ffg sss
Поиск
ddd нет в исходной подстроке
$ lab8 ddd fff gg
программа по поиску в ведёной строке другой подстроки введёной в качестве первого параметра
Введите исходную строку :
hhh ff kk sss ddd ggg fff ggg
Поиск
CPU time limit exceeded
а должна вот что
Код: Выделить всё
$ lab8 ddd fff gg
Введите исходную строку :
ffg sss aaa ddd fff gg rr ggg
Поиск
исходная строка
ffg sss aaa ddd fff gg rr ggg
результат
ffg sss aaa dddfff fff rr ggg
насчёт седа не очень понял он может всё точто я написал со строкой зделать или он позволяет работать со строкой типо пропустить слово удалить его из строки
Re: скрипт по работе со строками
Добавлено: 2008-06-02 10:00:11
zg
riptor2006 писал(а):насчёт седа не очень понял он может всё точто я написал со строкой зделать или он позволяет работать со строкой типо пропустить слово удалить его из строки
man sed
riptor2006 писал(а):$ lab8 ddd fff gg
ууу.. это ты на кого учишься? если это лаба, то выкладывай условие
Re: скрипт по работе со строками
Добавлено: 2008-06-02 10:25:31
riptor2006
ман я в первую очередь почитал и руский и английский едиственное понял что он вроде работает со строками и файлами а как и что им можно делать нет
условие есть в первом посту наверху или имелось условие работы в том смысле мат возограждение можно обсудить ели будет работать
учусь я на электронщика я уже недёлю бьюсь над этой программой и не могу понять почему вылазят ошибки при не большом изменении что то вроде пробелов или вдругом случае она зацикливается и выдаёт ощибку дам где експр после цикла , что он незнает команду в кавычках
Re: скрипт по работе со строками
Добавлено: 2008-06-02 11:27:02
zg
Код: Выделить всё
zg# ./1.sh www .subdomain .ru
Введите строку: http://www.nic.ru
==============
Исходная строка: http://www.nic.ru
Строка для поиска: www
Строка после поиска: .subdomain
Строка для удаления: .ru
==============
Результат: http://www.subdomain.nic
zg#
Код: Выделить всё
zg# cat 1.sh
#!/bin/sh
if [ -z "$3" ]; then
echo "Используйте данную программу следующим образом"
echo " $0 строка_для_поиска строка_после_поиска строка_для_удаления"
exit 1
fi
# Читаем строку
echo -n "Введите строку: "
read SourceLine
# во введенной строке ищет подстроку, передаваемую
# в качестве первого параметра
# вставляет после каждой найденной подстроки символ,
# передаваемый в качестве второго параметра
ReplacedLine=`echo "$SourceLine" | sed -E "s/$1/&$2/gI"`
# удаляет из полученной строки символ, передаваемый в качестве третьего
# параметра
ReplacedLine=`echo "$ReplacedLine" | sed -E "s/$3//gI"`
echo "=============="
echo "Исходная строка: ${SourceLine}"
echo "Строка для поиска: $1"
echo "Строка после поиска: $2"
echo "Строка для удаления: $3"
echo "=============="
echo "Результат: ${ReplacedLine}"
zg#
Re: скрипт по работе со строками
Добавлено: 2008-06-02 13:29:36
riptor2006
незнаю мож я что то делаю не так но вот
Код: Выделить всё
laba8t www dog net
введите строку:httpwwwnet.ru
./laba8t: line 15: echo "$str1" | sed -E "s/$1/&$2/gI": No such file or directory
./laba8t: line 18: echo "$out1" | sed -E "s/$3//gI": No such file or directory
исходная строка httpwwwnet.ru
искомая строка:www
вставляемая строка:dog
удаляемая строка:net
Результат :
Код: Выделить всё
$ cat laba8t
#!/bin/sh
if [ -z "$3" ]
then
echo "неверное количество параметров"
echo " $0 строка_поиска строка_ для_вставки_после_ искомой_ строки строка_для_удаления"
exit 1
fi
# чтение строки
echo -n "введите строку:"
read str1
# поиск и вставка
out1= 'echo "$str1" | sed -E "s/$1/&$2/gI"'
# Удаление
out1= 'echo "$out1" | sed -E "s/$3//gI"'
echo "исходная строка $str1"
echo "искомая строка:$1 "
echo "вставляемая строка:$2"
echo "удаляемая строка:$3"
echo "Результат : $out1 "
Re: скрипт по работе со строками
Добавлено: 2008-06-02 13:39:39
zg
кавычки обратные, а не прямые, и пробелы убери, после знака равно
Re: скрипт по работе со строками
Добавлено: 2008-06-02 13:47:39
zg

)) оффтоп: прально делаешь, что код правишь, преподы иногда очень сильно удивляются

когда мой код видят
Re: скрипт по работе со строками
Добавлено: 2008-06-02 14:00:29
riptor2006
насчёт кавычек не понял какие и где
Код: Выделить всё
out1= 'echo "$str1" | sed -E "s/$1/&$2/gI"'
вданный момент прога имет такой результат
Код: Выделить всё
$ laba8t www dog net
введите строку:hfhfwwwghfhnetru
исходная строка hfhfwwwghfhnetru
искомая строка:www
вставляемая строка:dog
удаляемая строка:net
Результат : echo "$out1" | sed -e "s/$3//gI"
$ vi laba8t
#!/bin/sh
if [ -z "$3" ]
then
echo "неверное количество параметров"
echo " $0 строка_поиска строка_ для_вставки_после_ искомой_ строки строка_для_удаления"
exit 1
fi
# чтение строки
echo -n "введите строку:"
read str1
# поиск и вставка
out1='echo "$str1" | sed -e "s/$1/$2/gI"'
# Удаление
out1='echo "$out1" | sed -e "s/$3//gI"'
echo "исходная строка $str1"
echo "искомая строка:$1 "
echo "вставляемая строка:$2"
echo "удаляемая строка:$3"
echo "Результат : ${out1} "
Re: скрипт по работе со строками
Добавлено: 2008-06-02 14:16:48
Alex Keda
Re: скрипт по работе со строками
Добавлено: 2008-06-02 14:49:50
riptor2006
почетал а толку нефига не врубился как их ставить и куда
толиобратный слешь это обратная кавычка и нужно вместо ' поставить \ или вообще надо вместо ' использовать "
Использование кавычек
Имеется несколько символов, которые имеют в Shell специальное значение. Это <, >, *, ?, [ и ]. Чтобы отменить специальное значение этих символов, требуется заключать их особым образом в одинарные (') или двойные (") кавычки. То же действие в отношении одиночного символа выполняет обратная наклонная черта (\). (Обратные одинарные кавычки (`) используются только для командной подстановки в Shell и не отменяют специальных значений символов.)
Все символы, заключенные в одинарные кавычки, воспринимаются как обычные текстовые символы. Например, строка:
echostuff='echo $? $*; ls *| wc'
только присваивает переменной echostuff значение
echo $? $*; ls *| wc
но не вызывает выполнение ни одной из команд.
Внутри двойных кавычек специальное значение сохраняется только у некоторых символов - это $, \, ` и ". В результате внутри двойных кавычек имеет место подстановка значений переменных и команд. Однако, сами по себе двойные кавычки никак не влияют на подставляемые команды, и поэтому такие символы, как *, сохраняют свое специальное значение.
Чтобы отменить специальное значение символа $ и одинарных и двойных кавычек внутри двойных кавычек, перед ними требуется до полнительно указывать символ \. Вне двойных кавычек указание символа \ перед специальным символом адекватно заключению этого специального символа в одинарные кавычки. Символ \, стоящий перед символом новой строки, обозначает игнорирование этого символа. Благодаря этому можно продлевать командную строку.
Ниже приводятся несколько примеров использования кавычек:
Ввод Интерпретация
'`' обратная кавычка
'"' двойная кавычка
'`echo one`' одно слово '`echo one`
'\"' двойная кавычка
'`echo one`' слово one
'`' cинтаксическая ошибка
one two два слова one и two
'one two' одно слово 'one two'
'one two' одно слово 'one two'
'one * two' одно слово 'one * two'
'one * two' одно слово 'one * two'
`echo one` одно слово 'one'
вопрос по руководству что процетировано ещё есть что да как с бакслешом а впроге надо было кавычки те что на ё поставить вроде до этого менял не работал мож ещё что не было правильно
Re: скрипт по работе со строками
Добавлено: 2008-06-02 17:51:46
zg
riptor2006 писал(а):почетал а толку нефига
а как же ты накропал первый скрипт? он намного сложнее моего, или его не ты писал?
Re: скрипт по работе со строками
Добавлено: 2008-06-02 18:54:06
f_andrey
zg писал(а):а как же ты накропал первый скрипт? он намного сложнее моего, или его не ты писал?

ну как первый раз, ты чего в институтах не учился, на 99% это шаблон который ходит годами но меняются мелочи или аналогичный вариант
Re: скрипт по работе со строками
Добавлено: 2008-06-02 20:56:31
zg
f_andrey писал(а):ты чего в институтах не учился, на 99% это шаблон который ходит годами но меняются мелочи или аналогичный вариант
ааа..

ну тада дело гиблое )))
када я учился, то такую фигню никада не делал.. мне так верили

Re: скрипт по работе со строками
Добавлено: 2008-06-02 23:50:20
riptor2006
да первый скрипт писался по шаблону и по своей работе более понятен так как изучал си++ и паскаль аи вкакойто степени он похож на программы написаные на них
но поди узнай об существовании трёх видов кавычек которые по разному ещё и работают а на лекциях внимание на этом не уделяли также как и sed-у
да кстати зачем опция i там ведь она нечего не меняет в отличие от g
Re: скрипт по работе со строками
Добавлено: 2008-06-02 23:56:48
f_andrey
riptor2006 писал(а):так как изучал си++ и паскаль
я в таких случаях говорю проходил, это слово больше отражает суть процесса

Re: скрипт по работе со строками
Добавлено: 2008-06-03 7:22:25
zg
riptor2006 писал(а):да кстати зачем опция i там ведь она нечего не меняет в отличие от g
в мануале по седу это всё расписано, если ты его читал, то не мог не заметить
riptor2006 писал(а):да первый скрипт писался по шаблону и по своей работе более понятен так как изучал си++ и паскаль аи вкакойто степени он похож на программы написаные на них
трабла в том, что шелл только связка для других, специализированных, приложений, поэтому что awk, что expr, что sed, ему пофигу. Если ты в своём скрипте используешь expr, то с тем же успехом можешь использовать и sed.
Re: скрипт по работе со строками
Добавлено: 2008-06-03 11:06:39
riptor2006
f_andrey писал(а):riptor2006 писал(а):так как изучал си++ и паскаль
я в таких случаях говорю проходил, это слово больше отражает суть процесса

да три года прохождения си наверно перерастает в изучал а вот сказать что я его знаю полностью не могу
zg писал(а):riptor2006 писал(а):да кстати зачем опция i там ведь она нечего не меняет в отличие от g
в мануале по седу это всё расписано, если ты его читал, то не мог не заметить
riptor2006 писал(а):да первый скрипт писался по шаблону и по своей работе более понятен так как изучал си++ и паскаль аи вкакойто степени он похож на программы написаные на них
трабла в том, что шелл только связка для других, специализированных, приложений, поэтому что awk, что expr, что sed, ему пофигу. Если ты в своём скрипте используешь expr, то с тем же успехом можешь использовать и sed.
что можно совмещать другие скрипты и программы я знаю по аналогии с си и паскалем там есть различные библиотеки уже готовые а проблема в том что седа унас в курсе не было и в методическом материале тоже нет его
вот рабочий изменёный вариант так сказать
Код: Выделить всё
#!/bin/bash
if [ -z "$3" ]
then
echo "неверное количество параметров"
#echo " $0 строка_поиска строка_ для_вставки_после_ искомой_ строки строка_для_удаления"
exit 1
fi
# чтение строки
echo -n "введите строку:"
read str1
# поиск и вставка
if echo $str1 | grep $1 >/dev/null
then
out1=`echo "$str1" | sed -e "s/$1/&$2/gI"`
else
echo "$1 Net v ishodou podstroke"
fi
# Удаление
if echo $out1 | grep $3 >/dev/null
then
out1=`echo "$out1" | sed -e "s/$3//gI"`
else
echo "$3 Net v ishodnou podstroke"
fi
echo "исходная строка $str1"
echo "искомая строка:$1 "
echo "вставляемая строка:$2"
echo "удаляемая строка:$3"
echo "Результат : ${out1} "
Re: скрипт по работе со строками
Добавлено: 2008-06-03 11:49:02
zg
riptor2006 писал(а):роблема в том что седа унас в курсе не было и в методическом материале тоже нет его
зверский курс... как называется?
ну.. без методички трудно угадать... видишь ли, надо смотреть как подобные примеры вы учились решать, если ты уже баш юзаешь, то твою задачу можно в одну строчку запихать, только вот препод боюсь не оценит
в мане про баш почитай раздел про Parameter Expansion
Re: скрипт по работе со строками
Добавлено: 2008-06-03 11:58:55
riptor2006
zg писал(а):riptor2006 писал(а):роблема в том что седа унас в курсе не было и в методическом материале тоже нет его
зверский курс... как называется?
ну.. без методички трудно угадать... видишь ли, надо смотреть как подобные примеры вы учились решать, если ты уже баш юзаешь, то твою задачу можно в одну строчку запихать, только вот препод боюсь не оценит
в мане про баш почитай раздел про Parameter Expansion
курс называется как нистранно операционыесистемы
в принципе преподу достаточно и того варианта который уже есть