Как в VIM удалить повторяющуюся строку в заданном диапазоне
но оно удаляет только дважды встреченную строкучем это отличается от того, что ты хочешь?
может так?
%s/^\(.*\)\(\n\1\)\+$/\1/
рецепт не совмещается - то есть не работает.
E486: Pattern not found: ^\(.*\)\n\1$
set magic?
2. Ты уверен, что у тебя там есть повторяющиеся строки? Нажми на какой-нибудь "yy p" (без кавычек) и попробуй заново.
magicв строке статуса
2. Повторяющиеся строки точно есть.
5,50!uniq
%s/^\(.*\)\(\n\1\)*$/\1/
может так?А ну да, с плюсом даже правильнее. Не знаю, у меня работает. Диапазон можно просто через V выделить, тоже работает.
да вот именно, что все работает, я даже не знаю, что там может быть не так :/
чем это отличается от того, что ты хочешь?видимо хочет он от строк избавиться идущих подряд не только.
1. Сортировать нужный участок
:2,127!sortТеперь повторяющиеся строки идут сплошными блоками
2. Удалить повторяющиеся
2,127!uniqПовторяющиеся строки удаляются
man -P cat sort | grep -A 1 -- -u
зы. Геныч, извращения всякие бывают, конечно, но vim все-таки для ручного редактирования
-P cat - для понтов?Для надежности.
Для корректной работы команды и intended behaviour.
man -P 'grep -A 1 -- -u' sortпомни о котятах всегда.
Ты подстрелил меня, Билли! Ты всегда был чертовски ловок!
из диапазона с 5 по 50 строку каждая строка в результате встречалась только один раз.head source.txt -n 5 > result.txt
head source.txt -n 50|tail -n 45|uniq >> result.txt
tail source.txt -n +51 >> result.txt
Оставить комментарий
5065584
Есть текстовый файл, в нем есть повторяющиеся строки. Нужно, чтобы, например, из диапазона с 5 по 50 строку каждая строка в результате встречалась только один раз. Гугление дало рецептно оно удаляет только дважды встреченную строку и во всем файле. С заданием диапазона рецепт не совмещается - то есть не работает.
Подскажите, пожалуйста правильный вариант