Solução usando awk com vários delimitadores:
awk -F 'Tx\(0x|)' '/Tx/ {print $2}' <your_file>
Onde:
-
-F 'Tx\(0x|)': use delimitadores Tx (0x e ) -
/Tx/: somente linhas de impressão contendo Tx -
{print $2}: print segundo elemento
Eu tenho um arquivo de log ethereum do qual eu gostaria de extrair hash de transação localizado entre uma string particular Tx (0x e ) e há muitas linhas antes e depois.
Arquivo de entrada
I0623 10:56:00.025283 miner/worker.go:516] commit new work on block 1903 with 0 txs & 0 uncles. Took 621.171µs
I0623 10:56:00.025349 miner/unconfirmed.go:105] Solução usando awk com vários delimitadores:
awk -F 'Tx\(0x|)' '/Tx/ {print $2}' <your_file>
Onde:
-F 'Tx\(0x|)' : use delimitadores Tx (0x e )
/Tx/ : somente linhas de impressão contendo Tx
{print $2} : print segundo elemento Se apenas um Tx ... por linha:
sed -n 's/.*Tx(0x\(.*\)) to.*//p' logfile > outfile
Opção -n para suprimir a saída de linhas sem correspondência
Tags sed