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.