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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: bash: замена по шаблону в строке, начинающейся с другого шаблона  (Прочитано 3271 раз)

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

Оффлайн Malamut

  • Автор темы
  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3337
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
Задача: надо в некотором файлике в строках, начинающихся со слова "лопата" заменить все вхождения слова "грабли" на "вилы".

Т.е. была строка вида

лопата лейка грабли лом грабли

а стала

лопата лейка вилы лом вилы

Все остальные строки остаются без изменения.

Умею делать это в одну строчку на перле, однако надо на чистом баше для переносимости (grep -E, awk, sed - вот что доступно).

Я пока сделал только циклом, пересоздающим файл. Жутко страшно, но нормального способа не нашлось.
« Последнее редактирование: 21 Ноября 2012, 00:28:25 от Malamut »
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Задача: надо в некотором файлике в строках, начинающихся со слова "лопата" заменить все вхождения слова "грабли" на "вилы".
Код: (bash) [Выделить]
$ echo -e 'грабли лопата_грабли\nграбли.абвг\nлопата-1234-граблиграбли\nлопата//грабли' | sed '/^лопата/s/грабли/вилы/g'
грабли лопата_грабли
грабли.абвг
лопата-1234-вилывилы
лопата//вилы

Оффлайн Malamut

  • Автор темы
  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3337
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
Вах, а вот это круто! Не знал, что в sed можно комбинировать несколько regexp. А где про это можно прочитать?
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
А где про это можно прочитать?
LESS='-p ^Addresses' man sed=)

 

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