Вы можете изменить часовой пояс, который будет использовать 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
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>
grep -o '<?xml.*</canonMessage>' /path/to/log
debería hacer el truco.
La opción -o
para grep
le dice solo datos de salida que coinciden con la expresión regular proporcionada. Afortunadamente, aquí solo está hablando de extraer(XML parcial ), no analizarlo .
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 -n
imprimiendo 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 \1
y 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