Linux удалить строку до символа

Как мы можем удалить текст от начала до некоторого определенного выбранного слова, используя команду sed в Linux

У меня есть простой запрос, связанный с выделением и заменой текста в Linux. Для объяснения вопроса я использую команду sed. У меня есть следующий текст.

Привет мир, я просто текст для отображения.

Теперь я хочу напечатать в hello world только я могу сделать это с помощью следующей команды в Linux.

 echo "hello world, I am just simple text for display." | sed 's/, I am.*//g' 

Теперь я хочу полностью изменить эту функцию, как я могу удалить hello world с помощью простой команды, как sed.
Требуется вывод.Я просто текст для отображения. Будет очень полезно, если будут использоваться команды linux (sed и т. Д.). Спасибо

3 ответа

Чтобы отменить действие вашей команды И сохранить ту же часть строки для сопоставления (при условии, что это единственная исправляемая часть строки и вы хотите избавиться от любой другой части, которая может отличаться), вы можете сделать:

echo "hello world, I am just simple text for display." | sed 's/^.*\(, I am.*\)/\1/g' 
, I am just simple text for display 

Что делает регулярное выражение:

  • ^.*: сопоставление любого символа в начале строки до следующего выражения
  • \( & \): перехватить часть строки, которая соответствует выражению между ними (должно быть экранировано \, иначе они будут соответствовать символу в скобках).
  • Я.*: Матч, который вы нам даете,
  • \ 1: будет заменен результатом совпадения первого подвыражения между круглыми скобками
Читайте также:  What is pattern in linux

Таким образом, вы получите точный обратный эффект команды в вашем вопросе, используя ту же часть строки для сопоставления.

Источник

Sed удаление до знака и после знака

Допустим у меня есть текст (txtxtxtxtxtxtxtxtxtxtxt «qweqweqwe» rfrfrfrfrf) вопрос в том что можно ли с помощью Sed удалить все до первой » и удалить все после последней » и чтобы в тексте осталось только «qweqweqwe»

echo txtxtxtxtxtxtxtxtxtxtxt \«qweqweqwe\» rfrfrfrfrf | sed -r «s|.+ (\».+\») .+|\1|»

Вопрос, почему такой вариант не полностью работает (надо писать в файл только последнее значение выдачи ping, без единиц измерения)

ping 192.168.1.1 > ping | sed = ping | sed -e 's\^.*time=\\; s/ms.*//' > ping

С awk таже хрень, что то тут с потоками я недоганяю

ping 192.168.1.1 | awk -F "[\ ,=]" '' > ping
$ echo 'txtxtxtxtxtxtxtxtxtxtxt "qweqweqwe" rfrfrfrfrf' | perl -nale 'print($F[1])' 

чопорно, но работает: while [ true ] ; do ping -c1 192.168.1.1 | grep -Eo «time=.* » | sed ‘s/time=//’; sleep 1; done

В файл не пишет, всё тоже самое

awk умеет fflush() , а гнутый sed опцию «-u», для остальных утилит иногда помогает (stdbuf)

Сколько можно штамповать темы об одном и том же? Спрашивай всё в одной. И вообще иди читать man sed , там же всё написано.. Ты уже столько людям мозги паришь одной своей задачей, что уже мог наизусть этот выучить и практикой закрепить за это время.

Psych218 ★★★★★ ( 31.07.17 20:16:14 MSK )
Последнее исправление: Psych218 31.07.17 20:18:01 MSK (всего исправлений: 1)

Спасибо, всё получилось, но раньше я хрень написал какую то, вот правильно:

ping 192.168.1.1 | sed -u 's\^.*time=\\; s/ms.*//' > ping
ping 192.168.1.1 | awk -F "[\ ,=]" '' > pingawk

Источник

Команда Sed для удаления строки

Favorite

Добавить в избранное

Главное меню » Linux » Команда Sed для удаления строки

Команда Sed для удаления строки

S ed — это встроенный в Linux инструмент для работы с текстом. Термин sed означает «редактор потока». Несмотря на название, sed сам по себе не является текстовым редактором. Вместо этого он принимает текст в качестве входных данных, выполняет различные модификации текста в соответствии с инструкциями и распечатывает выходные данные.

Читайте также:  Время установки linux mint

Эта статья продемонстрирует, как использовать sed для удаления строки из текста.

Sed в Linux

Полное имя sed дает нам представление о методе его работы. Sed принимает вводимый текст как «поток». Текст может поступать откуда угодно — из текстового файла или стандартного вывода (STDOUT). После ввода данных sed работает с ним построчно.

Для демонстрации я сгенерировал простой текстовый файл.

Удаление строки с помощью sed

Чтобы удалить строку, мы воспользуемся командой sed «d». Обратите внимание, что вы должны объявить, какую строку нужно удалить. В противном случае sed удалит все строки.

Удалить одну строку

Следующая команда sed удалит первую строку текста.

В основном, чтобы удалить строку, вам нужен номер строки целевой строки. Удалим строку 5.

Чтобы удалить последнюю строку текстового файла, вместо ручного вычисления номера строки используйте «$».

Удалить диапазон строки

Sed может удалить ряд строк. Здесь минимальное значение строки равно 1, а максимальное значение строки — 5. Чтобы объявить диапазон, мы используем запятую (,).

Удалить несколько строк

Что, если строки, которые вы хотите удалить, не находятся в фиксированном диапазоне? Взгляните на следующую команду sed. Обратите внимание, что мы используем точку с запятой (;) в качестве разделителя. По сути, каждый параметр с разделителями представляет собой отдельную команду sed.

Удалить все строки, кроме указанного диапазона

В следующем примере sed сохранит только строки, описанные в диапазоне. Здесь, «!» — оператор отрицания, указывающий sed сохранить определенные строки.

Удалить пустые строки

Если в тексте есть несколько пустых или пустых строк, следующая команда sed удалит их все.

Удалить линии по шаблону

Sed может искать определенный узор и выполнять указанные действия на линии. Мы можем использовать эту функцию для удаления определенных строк, соответствующих шаблону.

Читайте также:  Разбивка файловой системы linux

Давайте посмотрим на следующую демонстрацию. Sed удалит любую строку, содержащую строку «the».

Мы также можем описать несколько строк для поиска. Каждая строка разделяется символом «\|».

Удалить строки, начинающиеся с определенного символа

Чтобы обозначить начало строки, мы будем использовать символ каретки (^).

Следующая команда sed удалит все строки, начинающиеся с цифры. Здесь группа символов «[:digit:]» описывает все цифры (0–9).

Мы также можем описать несколько символов для действительного совпадения. В следующем примере будут найдены все строки, начинающиеся с «t» и «b».

В следующем примере показано, как удалить все строки, начинающиеся с символа верхнего регистра. Здесь мы используем группу символов верхнего регистра «[: upper:]».

Если целевые строки содержат символы нижнего регистра в начале, используйте группу символов нижнего регистра «[: lower:]».

Удалить строки, заканчивающиеся определенным символом

Чтобы обозначить конец строки, мы можем использовать символ «$». Он описывает совпадение с последним вхождением шаблона.

В следующем примере sed удалит строки, заканчивающиеся на «e».

Попробуем поискать по нескольким символам.

Удаление строк, соответствующих шаблону, и следующей строки

Мы уже продемонстрировали, как удалить строку, если шаблон совпадает. Мы также можем расширить и удалить следующую строку.

Ознакомьтесь со следующей командой sed.

Sed будет соответствовать строке, содержащей «the», и также удалит следующую строку.

Удаление строки от совпадения с шаблоном до конца

Мы можем расширить предыдущий пример, чтобы приказать sed удалить все строки, начиная с первого совпадения шаблона.

Здесь sed удалит строку, которая соответствует шаблону «первая» и все последующие строки.

Последняя мысль

Sed — простой инструмент. Однако он может творить чудеса благодаря поддержке регулярных выражений. Sed также легко интегрируется в различные скрипты.

Это было всего лишь краткое руководство, демонстрирующее одну из функций sed — удаление строк. С помощью sed вы можете делать множество других вещей.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Оцените статью
Adblock
detector