sed XML Начиная со строки x, вернуть номер строки следующего вхождения

tmux ls, который является псевдонимом для tmux list-sessions, перечисляет все активные сеансы, управляемые сервером tmux, к которому вы подключены.

Вывод, который вы получаете, означает, что запущено три сеанса, каждый с тремя окнами. Цифры в квадратных скобках показывают размер терминала для каждого сеанса.

При работе с несколькими сеансами tmux полезно инициализировать их именем, используя

tmux new -s SessionName

, так что в списке вы увидите SessionNameвместо числа в первом столбце вывода tmux ls. Конечно, вы также можете переименовать уже -открытый сеанс, см. этот вопрос .

0
19.06.2020, 12:02
2 ответа

Я нашел простое решение, оно несколько хакерское, но я не могу установить в систему другие инструменты, поэтому вот мой обходной путь.

Универсальный комментарий был добавлен до и после каждой части, помещенной в XML моим скриптом, который затем можно было найти с помощью grep и легко удалить с помощью того же простого оператора sed.

New XML

1. <!-- START MY CONFIG ADDITIONS-->
2. <SearchPattern> 
2.      <something></something>
3. </SearchPattern>
4. <!-- END MY CONFIG ADDITIONS-- 
5.
6. <OtherTag></OtherTag>
7.
8. <!-- START MY CONFIG ADDITIONS--> 
9. <SearchPatternHit2>
10.     <something></something>
11. </SearchPatternHit2>
12. <!-- END MY CONFIG ADDITIONS-->

New Vars

start_line=$(grep -n "<!-- START MY CONFIG ADDITIONS-->" ${FILE_PATH} | head -1 | cut -f1 -d':')
finish_line=$(grep -n "<!-- END MY CONFIG ADDITIONS-->" ${FILE_PATH} | head -1 | cut -f1 -d':')

Code

count=$(grep -c "<!-- START MY CONFIG ADDITIONS-->" ${FILE_PATH})

while [ $count -gt 0 ]; do
    start_line=$(grep -n "<!-- START MY CONFIG ADDITIONS-->" ${FILE_PATH} | head -1 | cut -f1 -d':')
    finish_line=$(grep -n "<!-- END MY CONFIG ADDITIONS-->" ${FILE_PATH} | head -1 | cut -f1 -d':')

    sed -i "${start_line}, ${finish_line}d" $FILE_PATH

    ((count--))
done
-2
18.03.2021, 23:26

Правильным способом редактирования XML является использование синтаксического анализатора XML, так как он будет обрабатывать изменения в формате представления, такие как дополнительные пробелы или другой макет строки. В настоящее время я предпочитаю xmlstarlet.

Учитывая действительный XML-документ как/tmp/xml

<?xml version="1.0"?>
<root>
  <SearchPattern>
    <something/>
  </SearchPattern>

  <OtherTag/>

  <SearchPatternHit2>
    <something/>
  </SearchPatternHit2>

  <SearchPatternHit2>
    <something_else/>
  </SearchPatternHit2>
</root>

Вы можете очень просто удалить раздел <searchPattern/>

xmlstarlet edit -d '//SearchPattern' /tmp/xml

Чтобы удалить одно вхождение повторяющегося элемента, включите ссылку на массив (, основанную на 1)

xmlstarlet edit -d '//SearchPatternHit2[1]' /tmp/xml
3
18.03.2021, 23:26

Теги

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