The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
sed замена строки в файле(по подстроке), !*! eugene, 22-Апр-11, 07:22  [смотреть все]
Здравствуйте. Необходимо с помощью sed и/или awk заменить все строки в файле содержащие подстроку, например есть файл:
hello=123
asdfsdfsdfsdf
sdfsdf
klk lksd isdfritj nm
hello=56
sdf
sdfklksdflksd
hello=678
sdnfhfgh dfrtllk

Нужно заменить все строки имеющие подстроку "hello=чтото там" на строку hello=1000
Заранее благодарен.

  • 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 замена строки в файле(по подстроке), !*! 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 замена строки в файле(по подстроке), !*! 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"




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру