Найти все вхождения 5 цифр после десятичной дроби, добавить цифру

Как предлагали другие, grep -Fwf file1 file2 должен работать.

Если вы хотите использовать циклы, попробуйте

for i in `cat file1`; do  grep " "${i}" " file2; done
3
28.02.2017, 16:41
2 ответа
:%s/\(\.\d\{5\}\) /\10 /

Это может делать то, что вы хотите.

Пояснение

С помощью \ (\. \ D {5 \} \) мы фиксируем первое вхождение точки ( \. ) и пять цифр ( \ г \ {5 \} ). Также мы проверяем, что их ровно пять, покидая пространство после группы захвата.

Во второй части подстановки мы используем \ 1 , чтобы получить доступ к первой (и однократной) группе захвата, поместив после нее 0 и пробел конец, потому что пространство соответствовало регулярному выражению, но не было перенесено во вторую часть.

Немного о группах захвата: \ 10 в точности «группа захвата номер один и ноль после нее». Таким образом, вы можете получить доступ только к восьми группам.

1
27.01.2020, 21:30

В качестве более общего способа заставить все числа иметь 6 цифр после точки, вы можете сделать:

:%s/\.\d\+/&00000/g
:%s/\.\d\{6}\zs\d*//g

Первый добавляет 5 нулей и второй удаляет все, кроме первых 6 цифр после точки. \ zs - это vim эквивалент perl s \ K , который сбрасывает начало согласованной части.

Вы также можете делать такие вещи, как:

 :%s/\d\+\.\d\+/\=printf("%.6f", str2float(submatch(0)))/g
0
27.01.2020, 21:30

Теги

Похожие вопросы