- Как мы можем удалить текст от начала до некоторого определенного выбранного слова, используя команду sed в Linux
- 3 ответа
- Sed удаление до знака и после знака
- Команда Sed для удаления строки
- Sed в Linux
- Удаление строки с помощью sed
- Удалить одну строку
- Удалить диапазон строки
- Удалить несколько строк
- Удалить все строки, кроме указанного диапазона
- Удалить пустые строки
- Удалить линии по шаблону
- Удалить строки, начинающиеся с определенного символа
- Удалить строки, заканчивающиеся определенным символом
- Удаление строк, соответствующих шаблону, и следующей строки
- Удаление строки от совпадения с шаблоном до конца
- Последняя мысль
Как мы можем удалить текст от начала до некоторого определенного выбранного слова, используя команду 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: будет заменен результатом совпадения первого подвыражения между круглыми скобками
Таким образом, вы получите точный обратный эффект команды в вашем вопросе, используя ту же часть строки для сопоставления.
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 для удаления строки
Добавить в избранное
Главное меню » Linux » Команда Sed для удаления строки
S ed — это встроенный в Linux инструмент для работы с текстом. Термин sed означает «редактор потока». Несмотря на название, sed сам по себе не является текстовым редактором. Вместо этого он принимает текст в качестве входных данных, выполняет различные модификации текста в соответствии с инструкциями и распечатывает выходные данные.
Эта статья продемонстрирует, как использовать sed для удаления строки из текста.
Sed в Linux
Полное имя sed дает нам представление о методе его работы. Sed принимает вводимый текст как «поток». Текст может поступать откуда угодно — из текстового файла или стандартного вывода (STDOUT). После ввода данных sed работает с ним построчно.
Для демонстрации я сгенерировал простой текстовый файл.
Удаление строки с помощью sed
Чтобы удалить строку, мы воспользуемся командой sed «d». Обратите внимание, что вы должны объявить, какую строку нужно удалить. В противном случае sed удалит все строки.
Удалить одну строку
Следующая команда sed удалит первую строку текста.
В основном, чтобы удалить строку, вам нужен номер строки целевой строки. Удалим строку 5.
Чтобы удалить последнюю строку текстового файла, вместо ручного вычисления номера строки используйте «$».
Удалить диапазон строки
Sed может удалить ряд строк. Здесь минимальное значение строки равно 1, а максимальное значение строки — 5. Чтобы объявить диапазон, мы используем запятую (,).
Удалить несколько строк
Что, если строки, которые вы хотите удалить, не находятся в фиксированном диапазоне? Взгляните на следующую команду sed. Обратите внимание, что мы используем точку с запятой (;) в качестве разделителя. По сути, каждый параметр с разделителями представляет собой отдельную команду sed.
Удалить все строки, кроме указанного диапазона
В следующем примере sed сохранит только строки, описанные в диапазоне. Здесь, «!» — оператор отрицания, указывающий sed сохранить определенные строки.
Удалить пустые строки
Если в тексте есть несколько пустых или пустых строк, следующая команда sed удалит их все.
Удалить линии по шаблону
Sed может искать определенный узор и выполнять указанные действия на линии. Мы можем использовать эту функцию для удаления определенных строк, соответствующих шаблону.
Давайте посмотрим на следующую демонстрацию. Sed удалит любую строку, содержащую строку «the».
Мы также можем описать несколько строк для поиска. Каждая строка разделяется символом «\|».
Удалить строки, начинающиеся с определенного символа
Чтобы обозначить начало строки, мы будем использовать символ каретки (^).
Следующая команда sed удалит все строки, начинающиеся с цифры. Здесь группа символов «[:digit:]» описывает все цифры (0–9).
Мы также можем описать несколько символов для действительного совпадения. В следующем примере будут найдены все строки, начинающиеся с «t» и «b».
В следующем примере показано, как удалить все строки, начинающиеся с символа верхнего регистра. Здесь мы используем группу символов верхнего регистра «[: upper:]».
Если целевые строки содержат символы нижнего регистра в начале, используйте группу символов нижнего регистра «[: lower:]».
Удалить строки, заканчивающиеся определенным символом
Чтобы обозначить конец строки, мы можем использовать символ «$». Он описывает совпадение с последним вхождением шаблона.
В следующем примере sed удалит строки, заканчивающиеся на «e».
Попробуем поискать по нескольким символам.
Удаление строк, соответствующих шаблону, и следующей строки
Мы уже продемонстрировали, как удалить строку, если шаблон совпадает. Мы также можем расширить и удалить следующую строку.
Ознакомьтесь со следующей командой sed.
Sed будет соответствовать строке, содержащей «the», и также удалит следующую строку.
Удаление строки от совпадения с шаблоном до конца
Мы можем расширить предыдущий пример, чтобы приказать sed удалить все строки, начиная с первого совпадения шаблона.
Здесь sed удалит строку, которая соответствует шаблону «первая» и все последующие строки.
Последняя мысль
Sed — простой инструмент. Однако он может творить чудеса благодаря поддержке регулярных выражений. Sed также легко интегрируется в различные скрипты.
Это было всего лишь краткое руководство, демонстрирующее одну из функций sed — удаление строк. С помощью sed вы можете делать множество других вещей.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.