Конечно. Вам нужно отредактировать файл ~/.bashrc
.
В качестве примера рассмотрим английскую систему (en_US.UTF-8
locale/language и us
) клавиатуры. Чтобы предоставить определенному пользователю итальянское окружение, нужно отредактировать его файл ~/.bashrc
, добавив следующие строки:
export LC_ALL=it_IT.UTF-8
export LANG=it_IT.UTF-8
loadkeys it
Это может быть невозможно в sed
. (Вызов отправлен; Я жду, что я ошибаюсь. )Если вам конкретно требуется решение sed
, Вы могли бы также перестать читать это.
Мне удалось это сделать комбинацией tac
иawk
:
tac fav.html | awk '
/<\/ul>/ { flag=1; level++; }
/<ul>/ { print save[level]; level--; }
flag && /name/ { flag=0; save[level] = $0; next; }
{ print; }
' | tac > fav.html.new && mv fav.html.new fav.html
tac fav.html
переворачивает fav.html
на линейной основе -на -линейной основе (tac
– это cat
, написанное в обратном порядке )и, таким образом, получается
</ul>
name: "Fav",
</ul>
name: "Network",
<li href="https://discordapp.com">Discord</li>
︙
<ul>
︙
<ul>
<ul>
Первые две строки кода awk
подсчитывают уровень вложенности <ul>
. Поскольку они идут в обратном порядке, </ul>
увеличивает уровень и <ul>
уменьшает его. Когда мы видим </ul>
, мы устанавливаем flag
, чтобы указать, что мы входим в блок <ul>
снизу. Когда мы находим name
внизу блока <ul>
, мы сохраняем его, и перейдите к строке next
(, не печатая строку name
). Когда мы находим <ul>
(, то есть начало блока <ul>
), мы печатаем сохраненный name
до того, как печатаем сам <ul>
.
В финале tac
строки снова меняются местами, вернув большинство из них туда, где они были изначально, и помещая каждоеname
после соответствующее ему <ul>
.