Удалить все символы после шаблона в текстовом файле

У меня есть текстовый файл с тысячами строк текста. Каждая строка заканчивается как

\\server\share\file.txt -> information

Я хочу удалить все после пробела после окончания расширения файла. Итак, все после "- > " (есть пробел после первой цитаты)

Как вы это сделаете? Я хотел бы использовать vim, поскольку я пытаюсь понять больше об этом, но любая программа будет делать; Я хотел бы сделать это в ближайшее время.

Ответ 1

Ваше описание противоречиво.

  • "все после пробела после окончания расширения файла"
  • "Итак, все после" → "(там есть пробел после первой цитаты)"

Вы хотите сохранить стрелку или нет?

1 выполняется просто:

:%s/ ->.*/

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

:%s/ ->.*/ /

2 можно выполнить с помощью

:%s/\( ->\).*/\1/

Если вы предпочитаете просматривать результаты поиска перед заменой, вы можете сначала создать свой поиск, используя /:

/\( ->\).*

Это позволит выделить все результаты, чтобы убедиться, что вы заменяете правильную вещь. Затем вы можете выполнить команду replace с пустым поисковым термином, чтобы использовать последний поиск (выделенный материал).

:%s//\1/

Ответ 2

Если вы хотите сохранить стрелку:

:%s/ ->\zs .*//

Если вы хотите его удалить:

:%s/ -> .*//

Ответ 3

Положительный lookahead может работать, что-то вроде /(?= ->).*/ для соответствия и замены пустотой.

Ответ 4

Глобально заменить

 -> .*

с пустой строкой

(Я предполагаю, что вы хотите удалить ->, даже если вы сказали "после".)

Ответ 5

Это можно легко сделать, используя метод разделения. Так как ваши строки одинаковы и имеют специальный знак стрелки ->, разделите на него и получите первый элемент

awk -F"->" '{print $1}' file

При необходимости перенаправляйтесь к новому файлу.