Как извлечь XML из записи журнала?

Вы можете изменить часовой пояс, который будет использовать date, изменив переменную TZ

Например

$ date
Sun Oct 11 01:42:44 CEST 2015
$ TZ=US/Pacific date                                
Sat Oct 10 16:43:14 PDT 2015
$ TZ=UTC date                                                      
Sat Oct 10 23:44:04 UTC 2015
0
20.02.2018, 20:13
3 ответа

Obtuve el resultado mencionado anteriormente usando el comando sed mencionado a continuación

sed  "s/.*payload=//g" input.xml | sed "s/,.*//g"

salida

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><canonMessage xmlns="somenamespace">...the message body...</canonMessage>
0
28.01.2020, 02:24

grep -o '<?xml.*</canonMessage>' /path/to/logdebería hacer el truco.

La opción -opara greple dice solo datos de salida que coinciden con la expresión regular proporcionada. Afortunadamente, aquí solo está hablando de extraer(XML parcial ), no analizarlo .

3
28.01.2020, 02:24

Si realmente quiere usar sed en lugar de grep , puede hacer que haga una búsqueda y reemplazo y solo imprima solo si coincide con algo:

sed -n 's%.*\(<?xml.*</canonMessage>\).*%\1%p' < input

Aquí estamos -nimprimiendo líneas por defecto, luego haga una búsqueda -y -reemplace del texto <?xml...</canonMessage>; el paréntesis escapado alrededor de ese texto lo "captura" en ranuras numeradas. Al agregar capturas de expresiones regulares .*antes y después del texto XML deseado, podemos reemplazar la línea completa con el texto guardado en \1y luego imprimir la línea resultante.

Utilicé %para separar el texto de búsqueda -y el texto de reemplazo -porque </canonMessage>tiene el típico separador de barra diagonal -. Si te gusta más el separador de barra diagonal -, solo tienes que escapar del que estás tratando de hacer coincidir:

sed -n 's/.*\(<?xml.*<\/canonMessage>\).*/\1/p' < input
0
28.01.2020, 02:24

Теги

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