Визуально выделите текст в скобках:
Ctr+V2jl
Увеличьте каждое число пять:
:norm 5
Объяснение Ctr+V Ctr+A:
:norm
выполняет целую команду в нормальном режиме. Ctr+V необходим, иначе курсор перешел бы назад к началу строки. Ctr+A увеличивает число 1, и это сделано 5 раз. Визуальный диапазон вставляется автоматически после нажатия двоеточия.
Править: Как Stephane правильно указал, предыдущий код увеличивает первое число, найденное на любой строке. Вот лучшее решение:
%s/\[\zs\d\+\ze\]/\=(submatch(0)+5)
Это добавляет пять ко всем целым числам в скобках. \zs
и \ze
используются для исключения скобок из соответствия и submatch
возвращает подобранное число.
Человек Bash
говорит:
... Операторы перенаправления могут предшествовать или появиться в любом месте в Simple Command или могут следовать команде.
В то время как
не простая команда.
Вы можете в zsh
, а не в bash
и choroba уже указала вам на документацию , но если хотите чтобы иметь перенаправление раньше, вы можете сделать что-то вроде:
< file eval '
while IFS= read -r line; do
...
done'
Или (в системах с поддержкой / dev / fd / n
):
< file 3<< 'EOF' . /dev/fd/3
while IFS= read -r line; do
...
done
EOF
(не то, что вы хотели бы это сделать) .
Вы также можете:
exec 3< file
while IFS= read -r line <&3; do
...
done
exec 3<&-
(обратите внимание, что exec
завершит сценарий, если файл
не может быть открыт).
Или используйте функцию:
process()
while IFS= read -r line; do
...
done
< file process
Вы можете использовать эту замену, если хотите предшествовать входу:
cat lines | while read line; do echo "line: $line"; done
Вы можете использовать exec для перенаправления stdin.
В скрипте:
exec < <(cat lines)
while read line ; do echo "line: $line"; done
Однако вы не можете использовать в оболочке для входа в систему (она сбросит файл в stdout и выйдет). В этом случае вы можете открыть другой дескриптор файла:
exec 3< <(cat lines)
while read -u 3 line ; do echo "line: $line"; done
Для справки: Используя exec