Я написал быстрый скрипт на 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
. Кажется, что это проще, чем версия на питоне.
Podría usar xtrace
, es decir, set -x
para 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 $xtracefile
deberí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=""
.