У меня есть текстовый файл, и я хочу удалить каждое слово, кроме первого слова в каждой строке, и я понятия не имею, как это сделать.
Итак, если у меня есть:
one two three
four five
six
Я хочу остаться с:
one
four
six
Есть идеи?
Ответ 1
Если строки не начинаются с пробелов, вы можете заменить ' .*' (который соответствует всем после первого слова) пустой строкой:
:%s/ .*//g
Ответ 2
Более надежное решение состоит в том, чтобы отфильтровать его через программу, которая действительно хороша в таких манипуляциях: awk.
Скажите, что у вас есть этот контент:
one two three
four five
six
Запустите :%!awk '{print $1}', и вы получите:
one
four
six
awk Поля разделителя полей по умолчанию - это пробел, хотя вы можете изменить его на все, что захотите, в зависимости от того, что вам нужно.
Ответ 3
В качестве альтернативы вы можете сделать это с помощью макроса.
Введите qa в нормальном режиме, чтобы начать запись макроса в регистр a.
Затем введите 0elDj, чтобы удалить все в текущей строке, кроме первого слова, и перейти к следующей строке.
Введите q снова, чтобы закончить запись макроса.
Теперь вы можете запустить макрос в любой строке с помощью @a.
Запустите :%norm! @a, чтобы применить макрос к каждой строке в буфере.
Таким образом вы можете повторить любую сложную операцию, которую вы хотите, а не просто подставлять.
Я люблю макросы:)
EDIT: Обратите внимание, что это не работает, если строка имеет строго менее 2 символов. По этой причине, как правило, это не лучший подход к этой проблеме.