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


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

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

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

Оффлайн ALiEN

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

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

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

(Нажмите, чтобы показать/скрыть)
🖥 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)
    • Просмотр профиля
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
текст копирует.


что я передумал.
Wars ~.o

Оффлайн Azure

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

Оффлайн Azure

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

Оффлайн ALiEN

  • Автор темы
  • Администратор
  • Старожил
  • *
  • Сообщений: 6725
  • 20% Cooler
    • Просмотр профиля
Re: Условия в sed. Возможно?
« Ответ #4 : 02 Декабря 2018, 15:09:36 »
Пока что сделал так:
Код: (bash) [Выделить]
#!/bin/bash

if grep -Pzq '\n\n[[:print:]]' "$1"  ; then
    sed '0,/^$/d' "$1"
       else
    cat "$1"
fi
🖥 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)
    • Просмотр профиля
Re: Условия в sed. Возможно?
« Ответ #5 : 02 Декабря 2018, 16:06:18 »
случае файл данных?
похоже команда strings
strings < /bin/bash
не?

Wars ~.o

 

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