Há apenas um pequeno erro em sua expressão sed
: o caractere mais +
precisa ser ignorado.
echo "state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES," | sed -n -e 's/^.*keycode\s\([0-9]\+\).*$//p'
processa 64
conforme esperado. Aqueles que usaram a sintaxe PCRE devem prestar atenção nas diferenças ao usar outras ferramentas como sed
ou awk
, cada um tendo um conjunto peculiar de caracteres especiais, alguns dos quais precisam ser escapados, outros não.
Um exemplo é \d
, que significa qualquer dígito no PCRE e tem um significado diferente em sed
, conforme apontado por Cyrus em seu comentário: [0-9]
ou [[:digit:]]
deve ser usado no lugar.
perl -e
é geralmente tão capaz quanto sed
e awk
, você pode querer considerar usá-lo se preferir sua sintaxe. Pode ser mais ou menos confuso do que suas contrapartes, dependendo do que você precisa fazer.
Veja introdutório artigos para perl -e
, experimente com PCRE ou leia um sed
útil ou awk
tutorial.