sed - потоковый редактор (Stream EDitor)

Различное программное обеспечения. Параметры настройки, советы по применению
Ответить
Аватара пользователя
nk
Модератор
Сообщения: 413
Зарегистрирован: 14 сен 2014, 00:35
Темы: 78
Статус: Не в сети

sed - потоковый редактор (Stream EDitor)

Сообщение nk » 19 окт 2016, 18:10

sed || SED || Stream EDitor
stream editor for filtering and transforming text

Описание: Sed - потоковый редактор, в основном используемый для выполнения преобразований с текстом на входном потоке. sed работает совершая лишь одно действие над вводом за проход. Встречается в большинстве дистрибутивов уже установленным.

См.также (SEE ALSO): awk(1), ed(1), grep(1), tr(1), perlre(1), sed.info,
the sed FAQ (http://sed.sf.net/grabbag/tutorials/sedfaq.txt), http://sed.sf.net/grabbag/ .

В дальнейшем можно много чего описать и накидать ссылок на различные форумы, блоги, вики,
но давайте лучше сделаем так: будем писать команду и значение ее работы, и писать именно ту команду с которой Вы работали и она Вам помогла, а не какой-то перевод с какого-то сайта - вот смотрите что может данный и т.д.

Аватара пользователя
nk
Модератор
Сообщения: 413
Зарегистрирован: 14 сен 2014, 00:35
Темы: 78
Статус: Не в сети

Re: sed - потоковый редактор (Stream EDitor)

Сообщение nk » 19 окт 2016, 21:40

  • Исправим строчку с id:3:initdefault: на id:4:initdefault: в файле /etc/inittab

    Код: Выделить всё

    sed -i s/id:3:initdefault:/id:4:initdefault:/ /etc/inittab
  • Удалим первую строчку из файла slack-desc

    Код: Выделить всё

    sed -e '1d' -i slack-desc
  • Заменим/Исправим несколько строк в файле index.theme, лежащем в текущем каталоге
    и удалим строчку с " #Inherits= ":

    Код: Выделить всё

    sed \
      -e "s|Name=Faenza-Cupertino|Name=Faenza-Cupertino-Dark|" \
      -e "s|Inherits=Faenza,|Inherits=Faenza-Dark,|" \
      -e "/#Inherits=/d" \
      -i ./index.theme
  • Изменим вывод в конкретном месте на значение из $переменной :

    Код: Выделить всё

    $ VERREV=`hg identify -ni | awk '{print $2}'`
    $ echo $VERREV
    16205
    
    $ cat autogen.sh | grep 'node:0:12'
        hgversion="-${node:0:12}"
    
    $ cat autogen.sh | grep 'node:0:12' | sed "s_\${node:0:12}_${VERREV}_"
        hgversion="-16205"
  • в выводе строку начинающуюся с Repo в ней nk заменим на _SBo,

    Код: Выделить всё

    $ cat /tmp/SBo/_queues/sbopkg-update.log 
    conky:
      POTENTIAL UPDATE
      Installed version:  conky-1.9.0-x86_64-1nk
      Repo version:  conky-1.10.5-x86_64-1nk
    deadbeef:
      INSTALLED PACKAGE IS NEWER THAN REPO
      Installed version:  deadbeef-0.7.2-x86_64-1nk
      Repo version:  deadbeef-0.6.2-x86_64-1nk
    заменим так что бы изменился вывод только в конце и добавим пустую строчку:

    Код: Выделить всё

    $ cat /tmp/SBo/_queues/sbopkg-update.log | sed  '/Repo/ s/nk$/_SBo\n/'
    conky:
      POTENTIAL UPDATE
      Installed version:  conky-1.9.0-x86_64-1nk
      Repo version:  conky-1.10.5-x86_64-1_SBo
    
    deadbeef:
      INSTALLED PACKAGE IS NEWER THAN REPO
      Installed version:  deadbeef-0.7.2-x86_64-1nk
      Repo version:  deadbeef-0.6.2-x86_64-1_SBo
    [+] удалим строчки с INSTALLED и POTENTIAL UPDATE

    Код: Выделить всё

    $ cat /tmp/SBo/_queues/sbopkg-update.log | sed -e '/^  Repo/ s/nk$/_SBo/' -e "/INSTALLED/d;/POTENTIAL/d"
    conky:
      Installed version:  conky-1.9.0-x86_64-1nk
      Repo version:  conky-1.10.5-x86_64-1_SBo
    deadbeef:
      Installed version:  deadbeef-0.7.2-x86_64-1nk
      Repo version:  deadbeef-0.6.2-x86_64-1_SBo
  • заменим строчку начинающуюся на " INSTALL( FILES ${CR3_CHANGELOG} "
    с " share/doc/cr3 " на " doc/${pkgname}-${pkgver} " в файле ./cr3qt/CMakeLists.txt

    Код: Выделить всё

    $ sed -i "/^INSTALL( FILES \${CR3_CHANGELOG}/s|share/doc/cr3|doc/${pkgname}-${pkgver}|" ./cr3qt/CMakeLists.txt
    здесь обращаю ваше внимание на "двойные_кавычки" и "\$переменную" . Еще пример, аналогично:

    Код: Выделить всё

    sed \
     -e "/^Exec=/s|=/opt/XnView/xnview|=/opt/XnView/xnview-$VERSION|" \
     -e "/^TryExec=/s|=/opt/XnView/xnview|=/opt/XnView/xnview-$VERSION|" \
     -e "/^Name=/s|=XnView Multi Platform|=XnView Multi Platform $VERSION|" \
     -e "/^GenericName=/s|=XnViewMP|=XnViewMP-$VERSION|" \
     -i $PKG/opt/XnView/XnView-$VERSION.desktop
  • Выведем из содержимого файла только первую строчку (аналог | head -1) :

    Код: Выделить всё

    $ cat /opt/XnView/WhatsNew.txt | sed q
• Web: Firefox • Jabber: Gajim • WM: Openbox
Изображение

Аватара пользователя
nk
Модератор
Сообщения: 413
Зарегистрирован: 14 сен 2014, 00:35
Темы: 78
Статус: Не в сети

Re: sed - потоковый редактор (Stream EDitor)

Сообщение nk » 08 май 2017, 02:37

  • удалим первую строчку и символы за и вместе со скобками *(...)* :

    Код: Выделить всё

    $ wget -qO- https://raw.githubusercontent.com/linuxmint/mint-x-icons/master/debian/changelog | head -1
    mint-x-icons (1.4.2) sonya; urgency=medium
    $ wget -qO- https://raw.githubusercontent.com/linuxmint/mint-x-icons/master/debian/changelog | head -1 | sed -e 's|.*(||' -e 's|).*||' 
    1.4.2
• Web: Firefox • Jabber: Gajim • WM: Openbox
Изображение

Ra_47
Сообщения: 7
Зарегистрирован: 02 янв 2017, 11:02
Темы: 2
Статус: Не в сети

Re: sed - потоковый редактор (Stream EDitor)

Сообщение Ra_47 » 08 май 2017, 17:41

По седу можно столько написать. что форума не хватит. Фантазия, она штука такая, границ не имеет. :D По сути, Vi, только без интерфейса. Т.е. тут сразу можно отправлять учить матчасть по регулярным выражениям, а потом штудировать маны. И все равно сколько ни учи, а рано или поздно попадается какой-нибудь пример, в котором с ходу разобраться не удается.

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей