Просто другая энергия способ сделать то же самое:
%s/^\(.\{-}|\)\{2}\zs.*//
%s/^\(.\{-}\zs|\)\{2}.*// " if you want to remove the 2nd pipe as well
На этот раз, regex соответствует как можно меньше (\{-}) символы, которые сопровождаются каналом, и дважды (\{2}), они проигнорированы ( \zs) для замены всех после (\z s) текст ничем.
Можно также записать макрос:
qq02f|Djq
и затем Вы сможете играть его с 100@q для выполнения макроса на следующих 100 строках.
Макро-объяснение:
Если бы Вы не должны использовать энергию, другая альтернатива была бы командой "сокращения" Unix.
cut -d '|' -f 1-2 file > out.file
Я нашел, что энергия не сильна в обработке очень больших файлов. Я не уверен, насколько большой Ваш файл. Возможно, кошка и sed вместе работали бы лучше.
Это отфильтрует все строки в буфере (1, $) посредством сокращения, чтобы сделать задание.
:1,$!cut -d '|' -f 1-2
Попытка с
:.!cut -d '|' -f 1-2
, Чтобы сделать это только на текущей строке.
Можно также сделать:
:%s/^\([^\|]\+|[^\|]\+\)\|.*$/\1/g
Почему энергия использования?
, Почему не просто делают
cat my_pipe_file | cut -d'|' -f1-2
Использование: команда, чтобы сделать команду пользователя, которую вы можете легко запустить.
:command -range=% YourNameHere <line1>,<line2>s/^\v([^|]+\|[^|]+)\|.*$/\1/