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

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

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

Теперь я хочу печатать в «hello world», только я могу сделать это, используя следующую команду в linux.

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

Теперь я хочу полностью изменить эту функцию, как я могу удалить «привет мир», используя простую команду, подобную sed.

Требуется вывод:

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

Я бы предпочел использовать команды linux (sed и т. Д.).

4
задан 25 June 2019 в 16:31

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

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

5
ответ дан 25 June 2019 в 16:31

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

Объяснение: в sed (и в другом месте, как в энергии), карат использования (^) для указания запускается строки. Замена удаляет просто тот текст.

1
ответ дан 25 June 2019 в 16:31

Вы могли использовать sed опция s. Команда будет,

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

дает

I am just simple text for display.

Объяснение

  • .* соответствия любое количество любых символов
  • ,<space> соответствия, и пространство
  • Так комбинация .*,<space> соответствия все прежде и пространство включая обоих, и ничем заменяет их.
1
ответ дан 25 June 2019 в 16:31

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

Похожие вопросы: