Заменить значения в столбце, файл с разделителями пробелами в Vim

-1

У меня есть файл, который выглядит так:

2067 24311 <hkxhk> {00}
2069 17219 <hkxhk> {00}
2071 20931 <hkxhk> {00}
2073 5557  <hkxhk> {00}
2075 2127  <hkxhk> {00}
2077 20947 <hkxhk> {00}
2081 18088 <hkxhk> {00}

Я хочу заменить значение первого столбца, чтобы оно выглядело как

5 24311 <hkxhk> {00}
5 17219 <hkxhk> {00}
5 20931 <hkxhk> {00}
5 5557  <hkxhk> {00}
5 2127  <hkxhk> {00}
5 20947 <hkxhk> {00}
5 18088 <hkxhk> {00}

Если первый столбец с разделителями пробелами был заменен новым значением, в данном случае 5.

user1256923
источник
Вы пробовали что-нибудь до сих пор? Показывая ваши попытки и описывая, с какими частями вы испытываете трудности, мы лучше понимаем вашу квалификацию и можем дать более точный ответ. На самом деле это выглядит так, как будто вы опубликовали требование и хотите, чтобы кто-то написал ваш код для вас.
Инго Каркат

Ответы:

3

Используя поиск и замену:

:%s/^\S*/5/

%s- поиск по всему файлу, ^- начало строки, \S- любой непробельный символ, \S*- любое количество любых непробельных символов, 5- ваше новое значение.

Использование макросов:

qq0cw5<Esc>q
:%norm! @q

qq- начать запись макроса с именем q, 0- место курсор в начало строки, cw5- замена ( с висящий) один ш Орд с 5, <Esc>- вернуться в нормальный режим работы , q- конец записи макросов;

%norm!- применить команду нормального режима к каждой строке файла, @q- выполнить макросы q(команда нормального режима).

Используя визуальный выбор, предполагая, что первый столбец имеет постоянную ширину (4 символа) :

gg0<C-v>G3lc5<Esc>

gg0- установить курсор в начало файла, <C-v>- запустить режим выбора блока, G- перейти к последней строке, чтобы выбрать столбец шириной в один символ (блок H × 1), 3l- перейти на три символа влево, чтобы выбрать блок H × 4, c5<Esc>- заменить выбор в каждой строке 5и вернуться в нормальный режим.

Заключение

Ваша проблема настолько проста, что подход поиска и замены оказался здесь самым простым, в то время как в общем случае запись макроса намного удобнее, чем изобретать регулярное выражение.

Дмитрий Александров
источник
1

Если вы работаете в Linux, Mac OSX или MINGw, или в любой системе, в которой есть этот columnинструмент (и шансы очень высоки, если вы используете Vim), вы можете использовать его для колонки файла:

  • columnэто инструмент Linux для колонизации списков
  • -t Подсчитайте количество столбцов в файле.
  • -s При подсчете столбцов интерпретируйте это как текущий разделитель столбцов.
  • -o При изменении файла используйте это как новый разделитель столбцов.

Вы можете запустить commandинструмент прямо из командной строки. Например:

column my-file.txt -t -s "|" -o " | " > my-file-columnated.txt

Или вы можете запустить его из Vim в командном режиме:

  • :%!column -t -s "|" -o " | "
  • : является стандартом для выполнения команды.
  • %влияет на все содержимое файла. Если вы пропустите его, вы будете выполнять операцию только на выбранных строках. Если нет выбранных строк, то вы будете влиять только на текущую строку.
  • ! выполняет внешний инструмент.

И, если ваш разделитель столбцов - это просто пробел, как в случае с оригинальным постером, то вам повезло, потому что используемый по умолчанию разделитель - columnэто именно пробел:

:%!column -t
jmgonet
источник