Как предлагали другие, grep -Fwf file1 file2 должен работать.
Если вы хотите использовать циклы, попробуйте
for i in `cat file1`; do grep " "${i}" " file2; done
:%s/\(\.\d\{5\}\) /\10 /
Это может делать то, что вы хотите.
С помощью \ (\. \ D {5 \} \)
мы фиксируем первое вхождение точки ( \.
) и пять цифр ( \ г \ {5 \}
). Также мы проверяем, что их ровно пять, покидая пространство после группы захвата.
Во второй части подстановки мы используем \ 1
, чтобы получить доступ к первой (и однократной) группе захвата, поместив после нее 0
и пробел конец, потому что пространство соответствовало регулярному выражению, но не было перенесено во вторую часть.
Немного о группах захвата: \ 10
в точности «группа захвата номер один и ноль после нее». Таким образом, вы можете получить доступ только к восьми группам.
В качестве более общего способа заставить все числа иметь 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