Quero traduzir:
"a b c syscall=257 success=yes"
no seguinte:
"a b c syscall=openat success=yes"
Gostaria de usar o grupo sed capturando regexp e substituição combinados com o uso do ausyscall aplicado ao número extraído pelo grupo regexp.
Tentei o seguinte no Linux/bash:
echo "a b c syscall=257 success=yes" |
sed -e "s:syscall=\([0-9]*\):SYSCALL="$(ausyscall 257)":"
Imprime: a b c SYSCALL=openat success=yes
conforme o esperado.
Então eu tentei usar o grupo de captura #1 como argumento para ausyscall
. Assim:
echo "a b c syscall=257 success=yes" |
sed -e "s:syscall=\([0-9]*\):SYSCALL="$(ausyscall \1)":"
Isso invoca ausyscall 1
which imprime write
. Este não é o grupo capturado #1 (que tem um valor de 257).
Então tentei usar \\1
, mas também não funcionou:
echo "a b c syscall=257 success=yes" |
sed -e "s:syscall=\([0-9]*\):SYSCALL="$(ausyscall \\1)":"
Isso invoca ausyscall \1
, então falha, imprime um erro em stderr( Unknown syscall \1 using x86_64 lookup table
) e imprime a b c SYSCALL= success=yes
em stdout.
Ele falha ao passar o valor capturado para ausyscall. Tentei com aspas simples, mas a chamada para ausyscall não é feita.
É possível usar sed dessa maneira?
- Só estou interessado em saber se é esperado que isso seja possível com sed .
- Sei que isso pode ser feito por outros meios (perl, script python, gawk, etc.), mas quero ver se é possível com sed e se o problema está relacionado a aspas ou algo assim.
É possível com sed ? Se sim, o que estou esquecendo?