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


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

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

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

Оффлайн ALiEN

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

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

Почему он все строки до совпадения удаляет - непонятно.  Гугл не вразумил  :-\
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Azure

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

Оффлайн ALiEN

  • Автор темы
  • Администратор
  • Старожил
  • *
  • Сообщений: 7486
  • Luck Tales
    • Просмотр профиля
Azure, спасибо) а можете пояснить что значит конструкция {//d}? А то гугл видимо как-то по-своему отрабатывает метасимволы.
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Цитировать
.../d'
.../!d'
Wars ~.o

Оффлайн Azure

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

Оффлайн ALiEN

  • Автор темы
  • Администратор
  • Старожил
  • *
  • Сообщений: 7486
  • Luck Tales
    • Просмотр профиля
Azure, огромное спасибо, теперь понятно))

Вопрос решен, информация получена, тему закрываю. 
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

 

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