Помещая последнюю строку первой в каждом html
    с помощью sed

Конечно. Вам нужно отредактировать файл ~/.bashrc.

В качестве примера рассмотрим английскую систему (en_US.UTF-8 locale/language и us) клавиатуры. Чтобы предоставить определенному пользователю итальянское окружение, нужно отредактировать его файл ~/.bashrc, добавив следующие строки:

export LC_ALL=it_IT.UTF-8
export LANG=it_IT.UTF-8
loadkeys it
1
02.04.2019, 06:17
1 ответ

Это может быть невозможно в 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>.

0
28.01.2020, 00:16

Теги

Похожие вопросы