$ sed 's/^.*\(%[0-9]\+\).*$//' input
Supondo que uma linha contenha no máximo um desses %123
tokens e que cada linha contenha esse token.
O caractere meta \( \)
marca um grupo de correspondência - que é então referenciado na substituição por meio da referência anterior .
^
/ $
corresponde ao início / fim de uma linha.
Caso contrário, você poderá pré-filtrar a entrada, por exemplo:
$ grep '%[0-9]\+' input | sed 's/^.*\(%[0-9]\+\).*$//'
(quando nem todas as linhas contêm esse token)
Outra variante:
$ sed 's/\(%[0-9]\+\)/\n\n/g' | grep '%[0-9]'
(quando uma linha pode conter vários desses tokens)
Aqui estão as quebras de linha inseridas diretamente antes e depois de cada token - na primeira parte do pipe. Em seguida, a parte grep
remove todas as linhas de token não %123
.