
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 $study
mais um caractere arbitrário ( T
no seu exemplo) e seguida pelo final da linha.
A -P
opçã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 perl
soluçã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