Использование предшественника sed ed:
ed -s input <<< $'/^reader_1 =\n/^port =\nc\nport = 22443,\n.\nw\nq'
Это отправляет ed
строку команд ANSI -, цитируемую здесь -, для редактирования файла. Команды в последовательности:
/^reader_1 =
--поиск строки, начинающейся с "reader _1=" /^port =
--искать оттуда строку, начинающуюся с "port=" c
--изменить эту строку port = 22443,
--к этому тексту .
--конец текста замены w
--записать файл на диск q
--выйтиed
Вы можете ужесточить или ослабить регулярные выражения, чтобы они соответствовали более или менее точно, в соответствии с вашими фактическими данными.
Функция readline character-search
по умолчанию привязана к Ctrl+] . Это то, что вы упоминаете в своем вопросе:
$ bind -q character-search
character-search can be invoked via "\C-]".
Функция character-search-backward
привязана к Esc + Ctrl+]:
$ bind -q character-search-backward
character-search-backward can be invoked via "\M-\C-]".
\M
— это Esc , а не Alt .
Итак, для поиска x
в обратном направлении используйте Esc + Ctrl+] , а затем x .
Поскольку Esc совпадает с Ctrl+[ , может быть быстрее набрать Ctrl+[ + Ctrl+] для поиска назад для конкретного персонажа.
Очевидно, что в режиме редактирования командной строки Vi(set -o vi
)вы можете просто использовать f и F в обычном режиме, как в Vi, с которым вы, кажется, знакомы.