Удалить все символы после шаблона в текстовом файле
У меня есть текстовый файл с тысячами строк текста. Каждая строка заканчивается как
\\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
При необходимости перенаправляйтесь к новому файлу.