Запуск AWK в поиске Vim - PullRequest
3 голосов
/ 20 декабря 2009

Как запустить AWK при выборе поиска в Vim?

Мой псевдокод

%s/!awk '{ print $2 }'//d

Я пытаюсь удалить указанный столбец в файле.

Ответы [ 6 ]

19 голосов
/ 25 ноября 2012

Хотя они, вероятно, решают проблему оригинального плаката, ни один из ответов не решает проблему, указанную в заголовке вопроса. Мое предложение убрать первую строку вопроса и переименовать его как «Удаление одного столбца в vim», которое было единодушно отклонено, вот решение для людей, которые приходят туда, действительно ища это.

Удаление столбца (здесь второй, как в примере с псевдокодом OP) с помощью awk в vim:

:%!awk '{$2=""; print $0}'

Конечно, это также работает для части файла - например, для строк с 10 по 20:

:10,20!awk '{$2=""; print $0}'

Что касается "[идущего] awk в Vim в поиске", не уверен, что вы точно можете сделать это, но в любом случае поиск и замена - это простая работа для awk, если не ее основной цель. Следующее заменяет «pattern» на «betterpattern» во втором столбце, если оно соответствует:

:%!awk '$2~"pattern" {gsub("pattern","betterpattern",$2)}

Обратите внимание, что оператор NOT требует экранирования (\! вместо !). Следующее заменяет значение во втором столбце его приращением на 10, если оно соответствует «число», и оставляет другие строки без изменений:

:%!awk '$2~"number" {gsub($1,$1+10)} $2\!~"number" {print $0}'

Appart с этого момента это просто awk синтаксис.

3 голосов
/ 20 декабря 2009

В командном режиме нажмите Ctrl - v , чтобы перейти в визуальный режим, затем вы можете заблокировать выбор столбца с помощью клавиш перемещения курсора. Затем вы можете нажать и вставить его или удалить его или все, что вам нужно, используя соответствующие команды vim и нажатия клавиш.

2 голосов
/ 20 декабря 2009

Вам не нужно использовать awk, даже если второй столбец не является прямоугольной областью. Используйте замену:

:%s/ \w\+ / / 

Второй столбец состоит как минимум из одного слова (\ w \ +), разделенных пробелами. Замена одна пустая. Это для выбранного диапазона линий:

:'<,'>s/ \w\+ / / 
1 голос
/ 20 декабря 2009

, если вы хотите что-то удалить, используйте :%s/pattern//

шаблон не может быть командой, это в основном регулярное выражение. Выражение 2-го поля в регулярном выражении не очень легко

если вы хотите удалить 2-е поле, вы можете отфильтровать текст с помощью утилиты вырезки

:%! cut -d ' ' -f 2 --complement
0 голосов
/ 20 декабря 2009

Вы можете удалить данный столбец в файле только из vim. В командном режиме используйте следующее для удаления столбца n:

:%s/\(.\{n-1}\).\{1}\(.*$\)/\1\2/g
0 голосов
/ 20 декабря 2009

вы можете нажать 0 , затем нажмите w , чтобы перейти ко второму столбцу, и наберите c w .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...