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: будет заменен результатом совпадения первого подвыражения между круглыми скобками

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

Источник

Команда sed в Linux

Потоковый редактор текста SED (Stream EDitor) позволяет быстро и эффективно редактировать файлы. В Linux команда sed часто используется для замены текста.

Примеры использования команды sed в Linux

  • Синтаксис
  • Опции
  • Использование команды sed в Linux
    • Замена указанного текста
    • Замена всех вхождений указанного текста
    • Замена определённого вхождения в строке
    • Вывод только строки с замещающим текстом
    • Замена текста с игнорированием регистра
    • Замена указанного текста в определённой строке
    • Замена текста только в определённом диапазоне строк
    • Удаление определённой строки
    • Удаление строки в определённом диапазоне строк
    • Удаление строк от определённой до последней

    Синтаксис

    sed [оции. ] [скрипт] [входной_файл. ]

    Опции

    -n, —quiet, —silent Выключить автоматическую печать образца —debug Комментировать выполнение программы -e script, —expression=сскрипт Добавить сскрипт в исполняемые команды -f script-file, —file=файл-скрипта Добавить содержимое файла-скрипта в исполняемые команды —follow-symlinks Переходить по символьным ссылкам при обработке на месте -i[СУФФИКС], —in-place[=СУФФИКС] Править файлы на месте (создаёт копию, если указан СУФФИКС) -l N, —line-length=N Задать желаемую длину до переноса строки для команды l -E, -r, —regexp-extended Использовать в скрипте расширенные регулярные выражения (для переносимости используйте -E ) -s, —separate Рассматривать файлы раздельно, а не в виде одного длинного непрерывного потока -u, —unbuffered Загружать минимальный объём данных из входных файлов и чаще сбрасывать выходные буферы на диск -z, —null-data Разделять строки символами NUL

    Использование команды sed в Linux

    Команда отображает изменения, сделанные ей, в своём выводе. Если вы желаете переписать исходный файл, то используйте опцию -i , но это не рекомендуется. Целесообразнее сохранить изменения в другом (новом) файле. Для этого перенаправьте вывод, добавив > newfilename.txt в конце команды.

    Замена указанного текста

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

    Для замены текста с помощью sed , используется флаг замены s и разделители (обычно косые черты — / ) для разделения текстовых полей:

    sed 's/old_string/new_string/' filename.txt

    Замените old_string исходным текстом и new_string текстом, на который вы хотите его заменить.

    Воспользуемся следующим текстом:

    oleg@mobile:~/Directory:$ cat example.txt Мощному менеджеру пакетов pacman, поставляемому по умолчанию в дистрибутивах на основе Arch не хватает функции загрузки пакетов из пользовательского репозитория Arch (AUR). AUR — это поддерживаемый сообществом репозиторий, содержащий тысячи сторонних пакетов в виде сценариев установки, также известных как PKGBUILD. Чтобы установить пакеты с помощью этих PKGBUILD, нам потребуется помощник AUR, такой как yay, который не предустановлен в Arch Linux и недоступен в официальных репозиториях Arch. Конечно вы можете вручную устанавливать пакеты из AUR без использования этой утилиты, но она облегчает процесс генерирования и установки пакетов с минимальным взаимодействием с пользователем. oleg@mobile:~/Directory:$ 

    Данный текст содержит 5 строк, 2 из них являются пробельными.

    Заменим AUR на Aur . На выходе отобразится изменённый текст:

    oleg@mobile:~/Directory:$ sed 's/AUR/Aur/' example.txt Мощному менеджеру пакетов pacman, поставляемому по умолчанию в дистрибутивах на основе Arch не хватает функции загрузки пакетов из пользовательского репозитория Arch (Aur). AUR — это поддерживаемый сообществом репозиторий, содержащий тысячи сторонних пакетов в виде сценариев установки, также известных как PKGBUILD. Чтобы установить пакеты с помощью этих PKGBUILD, нам потребуется помощник Aur, такой как yay, который не предустановлен в Arch Linux и недоступен в официальных репозиториях Arch. Конечно вы можете вручную устанавливать пакеты из Aur без использования этой утилиты, но она облегчает процесс генерирования и установки пакетов с минимальным взаимодействием с пользователем. oleg@mobile:~/Directory:$ 

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

    Замена всех вхождений указанного текста

    По умолчанию sed заменяет только первое вхождение указанного текста в каждой строке. Она ищет первое вхождение указанного текста в строке, заменяет его и переходит к следующей строке. Например, при наличии нескольких вхождений этого слова в одной строке команда заменяет только первое вхождение.

    Если в одной и той же строке присутствует несколько вхождений одного и того же текста, то добавив в команду флаг g можно изменить их все.

    Команда для замены каждого вхождения заданного текста:

    sed 's/old_string/new_string/g' filename.txt

    Например, для замены всех вхождений AUR на Aur в файле example.txt вводим:

    oleg@mobile:~/Directory:$ sed 's/AUR/Aur/g' example.txt Мощному менеджеру пакетов pacman, поставляемому по умолчанию в дистрибутивах на основе Arch не хватает функции загрузки пакетов из пользовательского репозитория Arch (Aur). Aur — это поддерживаемый сообществом репозиторий, содержащий тысячи сторонних пакетов в виде сценариев установки, также известных как PKGBUILD. Чтобы установить пакеты с помощью этих PKGBUILD, нам потребуется помощник Aur, такой как yay, который не предустановлен в Arch Linux и недоступен в официальных репозиториях Arch. Конечно вы можете вручную устанавливать пакеты из Aur без использования этой утилиты, но она облегчает процесс генерирования и установки пакетов с минимальным взаимодействием с пользователем. oleg@mobile:~/Directory:$ 

    Вывод показывает, что команда заменила все вхождения AUR .

    Замена определённого вхождения в строке

    Команда sed позволяет вам выбрать, какое вхождение указанного текста вы хотите заменить в каждой строке. Для этого добавьте числовой флаг, например 1 , 2 , и т. д.:

    sed 's/old_string/new_string/#' filename.txt

    Например, чтобы заменить второе вхождение Arch в каждой строке текста на ARCH , используем эту команду:

    oleg@mobile:~/Directory:$ sed 's/Arch/ARCH/2' example.txt Мощному менеджеру пакетов pacman, поставляемому по умолчанию в дистрибутивах на основе Arch не хватает функции загрузки пакетов из пользовательского репозитория ARCH (AUR). AUR — это поддерживаемый сообществом репозиторий, содержащий тысячи сторонних пакетов в виде сценариев установки, также известных как PKGBUILD. Чтобы установить пакеты с помощью этих PKGBUILD, нам потребуется помощник AUR, такой как yay, который не предустановлен в Arch Linux и недоступен в официальных репозиториях ARCH. Конечно вы можете вручную устанавливать пакеты из AUR без использования этой утилиты, но она облегчает процесс генерирования и установки пакетов с минимальным взаимодействием с пользователем. oleg@mobile:~/Directory:$ 

    Команда заменила два вхождения в первом абзаце (строке) текста и одно — во втором, пропустив первые вхождения.

    Вывод только строки с замещающим текстом

    По умолчанию sed команда выводит всё содержимое файла вместе с замещающим текстом. Если у вас много текста и вы хотите сосредоточиться на строках с примененными изменениями, добавьте в команду необходимые атрибуты.

    Например, для вывода только тех строк, которые имеют подстановку при заданных условиях, используйте синтаксис:

    sed -n 's/old_string/new_string/p' filename.txt

    Опция -n отключает автоматическую печать, а флаг p предписывает sed печатать строки, в которых происходит замена.

    Вы можете добавить флаг p к другим как в примере ниже:

    oleg@mobile:~/Directory:$ sed -n 's/yay/YAY/1p' example.txt Чтобы установить пакеты с помощью этих PKGBUILD, нам потребуется помощник AUR, такой как YAY, который не предустановлен в Arch Linux и недоступен в официальных репозиториях Arch. oleg@mobile:~/Directory:$ 

    Выведена была лишь строка, содержащая yay .

    Замена текста с игнорированием регистра

    По умолчанию команда sed чувствительна к регистру. Для игнорирования регистра при подстановке текста следует добавить флаг i в конце команды:

    oleg@mobile:~/Directory:$ sed -n 's/yay/YAY/1p' example.txt Чтобы установить пакеты с помощью этих PKGBUILD, нам потребуется помощник AUR, такой как YAY, который не предустановлен в Arch Linux и недоступен в официальных репозиториях Arch. oleg@mobile:~/Directory:$ 

    Команда изменит вхождения искомого текста, написанного в любом регистре.

    Замена указанного текста в определённой строке

    Для замены текста в определённой строке к флагу s вместо # добавляется номер строки в качестве префикса:

    sed '# s/old_string/new_string/' filename.txt

    Замена текста только в определённом диапазоне строк

    Для замены несколько вхождений текста в диапазоне строк следует указывать диапазон строк:

    sed '# s/old_string/new_string/' filename.txt

    Удаление определённой строки

    Для удаления строки из файла с помощью команды sed используется флаг d и следующий синтаксис:

    sed '# s/old_string/new_string/' filename.txt

    Укажите номер строки, которую вы хотите удалить, вместо символа решетки # и выполните команду.

    Например, для удаления первой строки из файла example.txt введём:

    oleg@mobile:~/Directory:$ sed '1d' example.txt Чтобы установить пакеты с помощью этих PKGBUILD, нам потребуется помощник AUR, такой как yay, который не предустановлен в Arch Linux и недоступен в официальных репозиториях Arch. Конечно вы можете вручную устанавливать пакеты из AUR без использования этой утилиты, но она облегчает процесс генерирования и установки пакетов с минимальным взаимодействием с пользователем. oleg@mobile:~/Directory:$ 

    Удаление строки в определённом диапазоне строк

    Для удаления нескольких строк в диапазоне строк с помощью команды sed используется синтаксис:

    Замените символы решетки # на начало и конец диапазона строк. Например:

    oleg@mobile:~/Directory:$ sed '1,2d' example.txt Чтобы установить пакеты с помощью этих PKGBUILD, нам потребуется помощник AUR, такой как yay, который не предустановлен в Arch Linux и недоступен в официальных репозиториях Arch. Конечно вы можете вручную устанавливать пакеты из AUR без использования этой утилиты, но она облегчает процесс генерирования и установки пакетов с минимальным взаимодействием с пользователем. oleg@mobile:~/Directory:$ 

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

    Удаление строк от определённой до последней

    Для удаления строк с определённого номера строки до последней строки используется следующий синтаксис:

    Таким образом для удаления всех строк от строки 3 до конца файла example.txt следует выполнить следующее:

    oleg@mobile:~/Directory:$ sed '3,$d' example.txt Мощному менеджеру пакетов pacman, поставляемому по умолчанию в дистрибутивах на основе Arch не хватает функции загрузки пакетов из пользовательского репозитория Arch (AUR). AUR — это поддерживаемый сообществом репозиторий, содержащий тысячи сторонних пакетов в виде сценариев установки, также известных как PKGBUILD. oleg@mobile:~/Directory:$ 

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

    Заключение

    В этой статье вы ознакомились с основными приёмами использования текстового потокового редактора SED для изменения файла через командную строку. Этот редактор позволит значительно повысить продуктивность вашей работы.

    Источник

    Читайте также:  Astra linux посмотреть пользователей
Оцените статью
Adblock
detector