В vim
g^G
в нижней части экрана отображается что-то вроде:
Col 1 of 3; Line 2 of 2; Word 2 of 2; Char 5 of 8; Byte 7 of 10
Чтобы байтовое смещение курсора всегда отображалось в строке состояния, добавьте %o
к опции statusline
:
:set statusline+=\ %o
(вам может понадобиться ввести :set laststatus=2
, чтобы строка состояния всегда была видна, даже если экран не разделен. Чтобы смещение отображалось в правильном размере, поместите %o
справа от %=
вstatusline
).
См. также :go 123
или 123go
, чтобы расположить курсор ближе всего к 123 rd байту.
Использование sed
и оболочки, которая знает о "здесь -строки":
$ sed '/begin/r/dev/stdin' file <<<"$variable"
mixture
Molefraction
begin
rn=45
fg=12
cd=6
END_OF_FILE
Это ищет строку begin
в file
, и когда она соответствует, вставляется все, что находится на стандартном вводе. Мы передаем значение $variable
на стандартный ввод через строку -.
Для других оболочек строка здесь -тривиально заменяется на printf
над конвейером:
$ printf '%s\n' "$variable" | sed '/begin/r/dev/stdin' file
mixture
Molefraction
begin
rn=45
fg=12
cd=6
END_OF_FILE
Чтобы сохранить это в новый файл, используйте перенаправление в конце. Если ваш sed
поддерживает редактирование места в -с помощью sed -i
, это можно использовать для изменения исходного файла (, рекомендуется протестировать это на копии файла; и запуск его несколько раз добавит данные в файл несколько раз ).
Чтобы получить правильный отступ, например,.bash
:
$ ( set -f; IFS=$'\n'; printf ' %s\n' $variable ) | sed '/begin/r/dev/stdin' file
mixture
Molefraction
begin
rn=45
fg=12
cd=6
END_OF_FILE
Здесь мы полагаемся на разбиение слов оболочки для форматирования значения переменной. Мы используем set -f
, чтобы убедиться, что не происходит подстановки имен файлов, затем мы устанавливаем $IFS
на новую строку,и пусть оболочка разделит значение переменной на слова с разделителями новой строки -. printf
немного изменен, чтобы вставить два пробела перед каждым словом.
Использованиеawk
:
awk -v f="$variable" '/begin/{print; print f; next}1' input
Это будет искать строку, содержащую begin
, печатать ее, затем печатать содержимое переменной, затем переходить к следующей строке. По умолчанию просто печатается любая другая строка.
Обратите внимание, :это не приведет к отступу переменной, как показано в вашем примере.
С помощью GNU awk вы можете редактировать файл на месте, используя опцию -i
:
awk -iv f="$variable" '/begin/{print; print f; next}1' input
Для всех других версий awk
вам потребуется создать новый файл:
awk -v f="$variable" '/begin/{print; print f; next}1' input > newfile
Затем вы можете использовать mv
для замены старого файла новым файлом, если хотите