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


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

Автор Тема: Условия в sed. Возможно?  (Прочитано 429 раз)

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

Оффлайн ALiEN175

  • Автор темы
  • Старожил
  • *
  • Сообщений: 3871
  • Capture the truth
    • Просмотр профиля
Условия в sed. Возможно?
« : 01 Декабрь 2018, 21:00:44 »
Как проще всего решить такую задачу:

Если в файле есть пустая строка - вывести текст после неё. Если после пустой строки нет текста - вывести весь файл.
Первое решается просто
sed '0,/^$/d' ./file
А вот как привязать второе условие - что-то не понимаю. Можно и скриптом, только чувствую, что всё проще решается.

Sed даже не обязательно, желательно самое простое решение, чтоб не городить лишних скриптов.

(Нажмите, чтобы показать/скрыть)
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: ZSH
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: ZSH

Оффлайн victor00000

  • Забанен
  • Старожил
  • *
  • Сообщений: 15573
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Условия в sed. Возможно?
« Ответ #1 : 01 Декабрь 2018, 21:53:23 »
руку в редактор пример nano.
123
456
4567
122333333
123
1234
1234576

пуку

123
456
//==================01
4567
122333333
123
1234
//============02
1234576

потом
удалить строки.
sed '/===01/,/======02/d' /test

или нужнее
!d
sed '/===01/,/======02/!d' /test
текст копирует.


что я передумал.
Нельзя друзья, дулу - AnrDaemon видите?
~.o

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5985
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Условия в sed. Возможно?
« Ответ #2 : 02 Декабрь 2018, 09:19:15 »
Если после пустой строки нет текста - вывести весь файл
Всё дело в правильной формулировке. Правильно поставите условие и считайте решили. Переделываем Ваше: "Если последняя строка пустая - вывести весь текст" Теперь сможете?
Еще подскажу: поскольку sed - строковый редактор, то читает/выводит он по строкам и если добрались до последней, то осталась только она => надо где-то файл хранить (в буфере хранения например) или использовать другое приложение.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5985
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Условия в sed. Возможно?
« Ответ #3 : 02 Декабрь 2018, 09:54:53 »
Код: Bash
  1. sed -z 's/.*\n\s*\n\([^\n]\)/\1/' file.txt
== работает правильно если только 1 пустая строка в тексте. Если несколько, а надо выводить после 1-й – придется заменять удвоенные переводы на спецсимвол и работать по нему.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ALiEN175

  • Автор темы
  • Старожил
  • *
  • Сообщений: 3871
  • Capture the truth
    • Просмотр профиля
Re: Условия в sed. Возможно?
« Ответ #4 : 02 Декабрь 2018, 15:09:36 »
Пока что сделал так:
Код: Bash
  1. #!/bin/bash
  2.  
  3. if grep -Pzq '\n\n[[:print:]]' "$1"  ; then
  4.     sed '0,/^$/d' "$1"
  5.        else
  6.     cat "$1"
  7. fi
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: ZSH
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: ZSH

Оффлайн victor00000

  • Забанен
  • Старожил
  • *
  • Сообщений: 15573
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Условия в sed. Возможно?
« Ответ #5 : 02 Декабрь 2018, 16:06:18 »
случае файл данных?
похоже команда strings
strings < /bin/bash
не?

Нельзя друзья, дулу - AnrDaemon видите?
~.o

 

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