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


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

Автор Тема: Вопрос по команде sed  (Прочитано 985 раз)

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

Оффлайн assistent

  • Автор темы
  • Активист
  • *
  • Сообщений: 682
    • Просмотр профиля
    • Caйт плеера foobnix
Вопрос по команде sed
« : 08 Июня 2010, 19:27:16 »
Вопрос к знатокам bash.
Возможно ли сделать с помощью команды sed следующее:
Надо, чтобы команда заменяла на "текст" первую пустую встретившуюся в файле строку, а остальные пустые строки не трогала.
Вроде сам с командой sed разобрался (после долгого курения мана) и многое могу сделать с помощью нее, но вот этот вопрос решить не смог.
Просьба помочь, только не кидайте гнилыми помидорами ))).
Foobnix - наше всё.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Вопрос по команде sed
« Ответ #1 : 08 Июня 2010, 19:50:09 »
sed -i '0,/^$/s/^$/текст/' file

Оффлайн assistent

  • Автор темы
  • Активист
  • *
  • Сообщений: 682
    • Просмотр профиля
    • Caйт плеера foobnix
Re: Вопрос по команде sed
« Ответ #2 : 08 Июня 2010, 20:12:03 »
sed -i '0,/^$/s/^$/текст/' file

Огромное спасибо. Вот сейчас задумался, и, похоже, только вы мне сможете подсказать, как сделать все тоже самое, но так, чтобы заменялась вторая пустая строка, а первая и все, которые после второй, оставались нетронутыми. Что-то мне кажется, что средствами sed это не решить и надо копать awk
Foobnix - наше всё.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Вопрос по команде sed
« Ответ #3 : 08 Июня 2010, 21:06:35 »

Оффлайн assistent

  • Автор темы
  • Активист
  • *
  • Сообщений: 682
    • Просмотр профиля
    • Caйт плеера foobnix
Re: Вопрос по команде sed
« Ответ #4 : 08 Июня 2010, 21:53:49 »
sed '0,/^$/! {0,/^$/ s/^$/текст/}'
awk тоже можно.

http://www.linuxquestions.org/questions/programming-9/replace-2nd-occurrence-of-a-string-in-a-file-sed-or-awk-800171/

Спасибо, вы мне очень помогли. Случайно не знаете, вот я пока ждал вашего ответа написал в awk нужный мне скрипт:
cat ~/Desktop/123 | awk "BEGIN {n=1} {if (/^$/) {if (n==2)  {print \"text\"} else {print}; n++} else {print}} END{}"но я не могу записать вывод команды в файл, стандартное перенаправление в файл не помогает
cat ~/Desktop/123 | awk "BEGIN {n=1} {if (/^$/) {if (n==2)  {print \"text\"} else {print}; n++} else {print}} END{}" > ~/Desktop/123просто файл 123 обнуляется, а новое содержание туда не записывается. В sed то же самое, но там есть параметр -i, который решает этот вопрос, в awk же такого параметра нет, как быть
« Последнее редактирование: 09 Июня 2010, 00:11:36 от assistent »
Foobnix - наше всё.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Вопрос по команде sed
« Ответ #5 : 08 Июня 2010, 21:59:15 »
но там есть параметр -i, который решает этот вопрос, в awk же такого параметра нет, как быть
Вариант: выводить в другой файл, а затем при необходимости перемещать его на место исходного.

Оффлайн assistent

  • Автор темы
  • Активист
  • *
  • Сообщений: 682
    • Просмотр профиля
    • Caйт плеера foobnix
Re: Вопрос по команде sed
« Ответ #6 : 08 Июня 2010, 22:06:28 »
но там есть параметр -i, который решает этот вопрос, в awk же такого параметра нет, как быть
Вариант: выводить в другой файл, а затем при необходимости перемещать его на место исходного.

я тоже об этом думал, согласен, решение рабочее, но кажется кривоватым. скорее всего есть более true способ, который я пока накопать не смог
Foobnix - наше всё.

 

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