Extraia parte da string usando grep

Extraia parte da string usando grep

Eu tenho 3 arquivos em um diretório

MYO144064T
MYO144064TA
MYO144064TX

Onde os dígitos e o 11º caractere serão alterados. No meu script csh, quero extrair as letras 'A' e 'X' provavelmente usando grep

A variável $ study é igual a MYO144064

O que consegui até agora é muito complicado

ls | grep $study | cut -c 11 | sed 's/\///'

O que me dá

A
X

Como posso fazer isso com processos mínimos e sem a linha em branco adicional?

Responder1

ls | grep -oP "(?<=$study.)[A-Z]$"

retornará qualquer letra maiúscula precedida pelo conteúdo de $studymais um caractere arbitrário ( Tno seu exemplo) e seguida pelo final da linha.

A -Popção (expressões regulares Perl) é necessária para poder usar a expressão lookbehind positiva (?<=...), mas pode não estar disponível em todos os sistemas e plataformas.

Responder2

ls | grep $study | grep -o "[AX]$"

retorna apenas o resultado de 'A' ou 'X' como último caractere

Responder3

Uma perlsolução:

$ perl -nle 'print chop if length == 11' file
A
X

Ou se você pode usar bash:

while read var
do
    [ ${#var} -eq 11 ] && echo ${var:(-1)}
done < file

informação relacionada