Возвращает последнюю команду, выполненную в функции bash

Я написал быстрый скрипт на Python, не знаю, достаточно ли он прост.

Поместите этот сценарий в ту же папку, что и ваш dest.xml .

#!/usr/bin/python
import re
FILENAME = 'dest.xml'
GROUPNAME = 'group1'
NODEID = 'PQR'

with open(FILENAME) as f:
    in_group = False
    for line in f:
        line = line.strip()
        group_pattern = 'group_name="{0}">'.format(GROUPNAME)
        end_group_pattern = '</domain>'
        node_pattern = '<node id="{0}">'.format(NODEID)
        if re.search(group_pattern, line):
            in_group = True
        if re.search(end_group_pattern, line):
            in_group = False
        if re.search(node_pattern, line) and in_group:
            pass
        else:
            print line

А теперь это awk-версия.

#!/usr/bin/awk -f
BEGIN {
    GROUPNAME = "group1"
    NODEID = "PQR"
    in_group = 0
    group_pattern =  ".*group_name=\"" GROUPNAME "\""
    end_group_pattern = "</domain>"
    node_pattern = "<node id=\"" NODEID "\">"
}
$0 ~ group_pattern {
   in_group = 1
}
$0 !~ node_pattern || in_group == 0 {
    print $0
}
$0 ~ end_group_pattern {
    in_group = 0
}

Запустите этот сценарий awk с аргументом - имя вашего файла dest.xml . Кажется, что это проще, чем версия на питоне.

2
31.05.2018, 12:56
1 ответ

Podría usar xtrace, es decir, set -xpara obtener un historial de todos los comandos que ejecuta el shell:

configuración:

xtracefile=$(mktemp)
exec 9>"$xtracefile"
BASH_XTRACEFD=9
set -x

luego ejecuta lo que sea

foo() { echo foo; echo bar; }
foo

Ahora $xtracefiledebería contener las líneas

+ echo foo
+ echo bar

y puedes trabajar con eso para elegir lo que quieras. Tenga en cuenta que esto no borra ni limpia el archivo en ningún momento, crecerá indefinidamente.

Si desea deshacerse de los signos +, asigne PS4="".

2
27.01.2020, 22:09

Теги

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