Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: sed: удалить только первую строку с совпадением  (Прочитано 950 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ALiEN175

  • Автор темы
  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4323
  • Capture the truth
    • Просмотр профиля
что-то не получается:
$: cat test
abc
def
gkl
abc
def
gkl

$: sed '0,/def/d' test
gkl
abc
def
gkl

Почему он все строки до совпадения удаляет - непонятно.  Гугл не вразумил  :-\
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6015
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Потому что Вы так адресуете «от строки 0 до строки с "def" — удалить "d". А по Вашему условиюsed '0,/def/{//d}' test
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ALiEN175

  • Автор темы
  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4323
  • Capture the truth
    • Просмотр профиля
Azure, спасибо) а можете пояснить что значит конструкция {//d}? А то гугл видимо как-то по-своему отрабатывает метасимволы.
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн victor00000

  • Забанен
  • Старожил
  • *
  • Сообщений: 15570
  • Глухонемой (Deaf)
    • Просмотр профиля
Цитировать
.../d'
.../!d'
Нельзя друзья, дулу - AnrDaemon видите?
~.o

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6015
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Поскольку мы определились с интервалом
от строки 0 по строку с "def"
то команда(-ы) внутри «{ }» будут выполнены именно для выбранного интервала.
Сама команда «d»elete (удалить, перейти к обработке следующей строки).
Внутри «/ /» задается образец поиска (шаблон), при наличии которого будет выполнена команда, идущая за ним. Поскольку шаблон у нас уже есть (мы его использовали задавая интервал «/def/», то его можно не дублировать указывая повторно.
Ещё вариант
Код: Bash
  1. sed -z 's/[^\n]*def[^\n]*\n//' test
« Последнее редактирование: 31 Июль 2017, 10:08:28 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ALiEN175

  • Автор темы
  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4323
  • Capture the truth
    • Просмотр профиля
Azure, огромное спасибо, теперь понятно))

Вопрос решен, информация получена, тему закрываю. 
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

 

Страница сгенерирована за 0.369 секунд. Запросов: 24.