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