Есть много способов:
Использование интерактивной оболочки в vim
В редакторе-
:sh
rm textfile.xml
Использование Bang (!)
Как предложил DopeGhoti-
:!rm textfile.xml
Из по этой ссылке .
Добавьте это в свой~/.vimrc
command! -complete=file -nargs=1 Remove :echo 'Remove: '.''.' '.(delete() == 0 ? 'SUCCEEDED' : 'FAILED')
Затем, in vim,
:Remove testfile.xml
Снова по той же ссылке в #3
Используйте эту команду:
:call delete(expand('%')) | bdelete!
Используйте инструмент, поддерживающий XML -, при работе с XML. Например, в xsh , оболочке XML ::LibXML , вы можете добиться результата с помощью
open logback-spring.xml ;
for //logger[@level='DEBUG'][appender-ref/@ref='logstash']
set @level 'TRACE' ;
save :b ;
Если ваш XML содержит объявления пространств имен, код будет немного сложнее.
Учитывая правильно -сформированный XML-документ, подобный следующему (, измененному из вашего примера):
<?xml version="1.0"?>
<root>
<springProfile name="dev">
<logger name="com.abcd.tdi" level="DEBUG" additivity="false">
<appender-ref ref="logstash"/>
<appender-ref ref="Async-Appender"/>
</logger>
</springProfile>
<springProfile name="dev">
<logger name="com.abcd.tdi" level="DEBUG" additivity="false">
<appender-ref ref="logstash"/>
</logger>
</springProfile>
<springProfile name="dev">
<logger name="com.abcd.tdi" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
</springProfile>
</root>
вы можете использовать xmlstarlet
для изменения всех атрибутов level
, для которых установлено значение DEBUG
, на TRACE
для каждого узла logger
, чей дочерний узел appender-ref
имеет атрибут ref
, равный logstash
, вот так:
$ xmlstarlet ed -u '//logger[appender-ref/@ref = "logstash"]/@level[. = "DEBUG"]' -v 'TRACE' file.xml
<?xml version="1.0"?>
<root>
<springProfile name="dev">
<logger name="com.abcd.tdi" level="TRACE" additivity="false">
<appender-ref ref="logstash"/>
<appender-ref ref="Async-Appender"/>
</logger>
</springProfile>
<springProfile name="dev">
<logger name="com.abcd.tdi" level="TRACE" additivity="false">
<appender-ref ref="logstash"/>
</logger>
</springProfile>
<springProfile name="dev">
<logger name="com.abcd.tdi" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
</springProfile>
</root>
XPath-запрос, аналогичный что использует choroba , также будет работать:
xmlstarlet ed -u '//logger[@level = "DEBUG"][appender-ref/@ref = "logstash"]/@level' -v 'TRACE' file.xml