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

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

дает

I am just simple text for display.

объяснение

  • .* соответствует любому количеству любых символов
  • ,<space> спички и пространство
  • Итак, комбинация .*,<space> соответствует всему ранее и пробелу, включая оба, и заменяет их ничем.

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

Пояснение: в sed (и в других местах, как в vim), используйте carat (^), чтобы указать начало строки. Подстановка удаляет только этот текст.

Другие вопросы по тегам