Isso remove todas as palavras com letras puras desde o começo da linha:
$ sed -r 's/^([[:alpha:]]* )*//' filename.tsv
AHF123432 | 123432 | dhfshfjdh
AFG23412 |23412 | dfshjhfjdhj
Ou para salvar a saída em um novo arquivo:
sed -r 's/^([[:alpha:]]* )*//' filename.tsv > final.tsv
Como funciona
-
[[:alpha:]]*corresponde a qualquer número de caracteres alfabéticos seguido por um espaço. Em outras palavras, corresponde a uma palavra seguida por um espaço.Mais detalhadamente,
[[:alpha:]]corresponde a um único caractere alfabético. '' [[: alpha:]] * 'corresponde a qualquer número desses caracteres. -
([[:alpha:]]* )*corresponde a qualquer número dessas palavras seguido por espaços. -
^([[:alpha:]]* )*corresponde a qualquer número de palavras seguido por espaços, mas por causa do^, apenas a partir do início da linha. -
O comando substituto remove todas as palavras correspondentes. O comando substituto tem o formato
s/old/new/onde, aqui,oldé a nossa expressão acima, que corresponde a qualquer número de palavras a partir do início da linha. Queremos substituir essas palavras por nada, então, usamos a string vazia paranew.
Antigamente, a expressão regular para corresponder a caracteres alfabéticos era [a-zA-Z] . Com fontes unicode modernas, isso agora é mais confiável. Como nossa expressão regular acima usa [:alpha:] , ela é segura para unicode.