- sed замена строки в файле(по подстроке), Frodo, 11:54 , 22-Апр-11 (1)
sed -r 's/hello=чтото там/hello=1000/g' in.file > out.file>[оверквотинг удален] > asdfsdfsdfsdf > sdfsdf > klk lksd isdfritj nm > hello=56 > sdf > sdfklksdflksd > hello=678 > sdnfhfgh dfrtllk > Нужно заменить все строки имеющие подстроку "hello=чтото там" на строку hello=1000 > Заранее благодарен.
- sed замена строки в файле(по подстроке), eugene, 12:00 , 22-Апр-11 (2)
> sed -r 's/hello=чтото там/hello=1000/g' in.file > out.file Ксожалению "чтото там" может быть любой последовательностью символов, вот в чем вся беда...
- sed замена строки в файле(по подстроке), LSTemp, 12:02 , 22-Апр-11 (4) –1
>[оверквотинг удален] > asdfsdfsdfsdf > sdfsdf > klk lksd isdfritj nm > hello=56 > sdf > sdfklksdflksd > hello=678 > sdnfhfgh dfrtllk > Нужно заменить все строки имеющие подстроку "hello=чтото там" на строку hello=1000 > Заранее благодарен.cat $file|sed 's/hello=.*/hello=1000/'
- sed замена строки в файле(по подстроке), asser, 12:09 , 22-Апр-11 (5)
таки cat $file|sed 's/^hello=.*/hello=1000/'
- sed замена строки в файле(по подстроке), asser, 12:12 , 22-Апр-11 (6)
и даже cat $file | sed 's/^hello=.*/hello=1000/g' > $newfile
- sed замена строки в файле(по подстроке), eugene, 12:34 , 22-Апр-11 (7)
- sed замена строки в файле(по подстроке), pilot.netgmail.com, 13:36 , 22-Апр-11 (8)
> и даже > cat $file | sed 's/^hello=.*/hello=1000/g' > $newfile Примерно тоже, как сделать ? если не найдено то "hello=1000" вставить в конец файла ?
- sed замена строки в файле(по подстроке), LSTemp, 14:53 , 22-Апр-11 (11)
>> и даже >> cat $file | sed 's/^hello=.*/hello=1000/g' > $newfile > Примерно тоже, как сделать ? > если не найдено то "hello=1000" вставить в конец файла ?с=`cat file|grep -c 'hello=1000'` [ $c -eq 0 ] && echo 'hello=1000' >> $file
- sed замена строки в файле(по подстроке), LSTemp, 14:49 , 22-Апр-11 (10)
> и даже > cat $file | sed 's/^hello=.*/hello=1000/g' > $newfile и даже поучить регулярные выражения. и man на команды почитать. мне вот интерестно нахрена в условиях поставленной тобой задачи еще /g использовать?
- sed замена строки в файле(по подстроке), sany, 13:54 , 22-Апр-11 (9) –2
то что ты спрашиваешь, называется "регулярные выражения" каждый программист должен иметь хотя бы начальный уровень работы с ними.
- sed замена строки в файле(по подстроке), oklas, 23:57 , 26-Окт-13 (12)
Доброго дня всем. Мне понадобилось решение подобной задачи, после некоторого поиска я не нашел решения которое бы устраивало меня полностью. В частности наиболее подходящее решение приведено здесь, но его недостаток двойной проход чтения файла, а нужно изменить или добавить разумеется за один проход. В частности потому что в этом же проходе выполняются другие операции с текстом. Я решил что надо получше разобраться с sed, но он оказался очень капризным, в части выполнения команд, когда они передаются прям в командной строке а не в файле, причем ошибок не пишется просто работает не как ожидается. Я воспользовался случаем задать вопрос Евгению Степанищеву. ( как Вы знаете автор игры Шахматы написанные на sed ) По его слова эта тривиальная задача решается так: s/^\(hello=\).*/\11000/g t $ a\ hello=1000 и запуск: sed -f replace.sed входной_файл Спасибо Евгению за решение. Надо сказать что я был абсолютно близок к решению, но не получил его, из-за капризностей правильнее сказать или тонкостей работы с командами sed передаваемые в командной строке, так как я не пытался создать файл и писать в нем нечто подобное, а делалал все в командной строке. Предложенное решение хотя и работало, но мне нужно именно в командной строке (без файла программы). Привести к требуемому виду, удалось не сразу, собственно первое время было примерно тоже самое что и сначала, то метки не замечались sed'ом переходы не выполнялись и прочее, что все обусловлено рядом тонкостей, в частности необходимо разбивать на несколько команд наборов (ключ -e) по меньшей мере из-за меток, новая строка в команде 'a', экранирование символов, предварительная обработка значений , содержащих '/', так: sed 's#/#\\\\/#g' и похоже это еще не всё. Полный вариант решения, на основе приведенного выше и с учетом того что было мне необходимо, в частности один проход и размещение в sh файле у меня получилось такое: sed -e "s/^$varname=.*/$varname=\"$value\"/g" \ -e '/^'$varname'.*/,$b' -e "\$ a \\ $varname=\"$value\"" Соответственно если упростить до исходной задачи, то примерно так: sed -e "s/^hello=.*/hello=1000/g" \ -e '/^hello.*/,$b' -e "\$ a \\ hello=1000"
- sed замена строки в файле(по подстроке), SnowPraha, 23:23 , 21-Окт-16 (13)
В одну строку без заморочек, привет Евгению Степанищеву sed -i 's/^Hello=.*/Hello=1000/g' filename
- sed замена строки в файле(по подстроке), oklas, 09:44 , 22-Окт-16 (14)
> В одну строку без заморочек, привет Евгению Степанищеву > sed -i 's/^Hello=.*/Hello=1000/g' filename Вы не дочитали форум, отвечаете только на исходное сообщение, на него ответ уже дан в самом начале. Ваш пример тривиальная замена, она не добавит в файл переменную "hello" если до этого она не была определена, и не позволяет делать другие (не sed) обработки файла за один и тот же проход чтения-записи.
|