Файловый редактор, указанный в POSIX -, ex
, способен делать именно это.
printf '%s\n' '/1//4/s//8/' x | ex file.txt
ex
может объединять несколько адресов. Таким образом, /1/
означает «Перейти к» (или обратиться к )«следующая строка, соответствующая регулярному выражению 1
». Затем /4/
переходит от этой строки к следующей строке, соответствующей 4
. И s//8/
имеет обычное значение; как и в Sed, пустое регулярное выражение, переданное команде s
, означает «повторно использовать последнее использованное регулярное выражение», которое в данном случае 4
.
Чтобы распечатать измененный файл, но не сохранять изменения, используйте вместо этого следующую команду:
printf '%s\n' '/1//4/s//8/' %p | ex file.txt
Просто чтобы лучше представить несколько адресов, следующая команда удаляет первую строку, содержащуюcherry
перед , первую строку, содержащую banana
, после , строку 27:
printf '%s\n' '27/banana/?cherry?d' x | ex file.txt
x
означает сохранить изменения и выйти, а %p
означает «печатать весь файл».(%
является синонимом 1,$
, который представляет собой диапазон адресов от первой до последней строки.)
Я только что собрал следующее решение. Он не только работает в Sublime Text, но и позволяет выделять текст с сдвигом .
preserve[Shift+LevelThree] = Shift;
к …/xdb/types/iso9995
. Подробности на аскубунту . type="THREE_LEVEL"
иactions[Group1]= [NoAction(), NoAction(), RedirectKey(keycode=<UP>, clearmods=Lock)
(до )к своим записям в /usr/share/X11/xkb/symbols/us
. Мои записи с немного другими ключами выглядят так:
key <AD07> { type="THREE_LEVEL",
symbols[Group1]= [ u, U, Home, Home ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(keycode=<HOME>, clearmods=Lock) ]
};
key <AD08> { type="THREE_LEVEL",
symbols[Group1]= [ i, I, Up, Up ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(keycode=<UP>, clearmods=Lock) ]
};
key <AD09> { type="THREE_LEVEL",
symbols[Group1]= [ o, O, End, End ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(keycode=<END>, clearmods=Lock) ]
};
key <AC07> { type="THREE_LEVEL",
symbols[Group1]= [ j, J, Left, Left ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(keycode=<LEFT>, clearmods=Lock) ]
};
key <AC08> { type="THREE_LEVEL",
symbols[Group1]= [ k, l, Down, Down ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(keycode=<DOWN>, clearmods=Lock) ]
};
key <AC09> { type="THREE_LEVEL",
symbols[Group1]= [ l, L, Right, Right ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(keycode=<RGHT>, clearmods=Lock) ]
};
Прочтите эту статью на Archlinux Wiki для получения более подробной информации.
Возможно, вы можете пропустить 1. и объявление типа, если вы не хотите выделять текст с помощью shift .