Извлечь часть строки с помощью grep

Извлечь часть строки с помощью grep

У меня есть 3 файла в каталоге

MYO144064T
MYO144064TA
MYO144064TX

Где цифры и 11-й символ изменятся. В моем скрипте csh я хочу извлечь буквы 'A' и 'X', вероятно, используя grep

Переменная $study равна MYO144064

То, что мне удалось сделать до сих пор, очень громоздко.

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

Что дает мне

A
X

Как это сделать с минимальными процессами и без дополнительной пустой строки?

решение1

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

вернет любую заглавную букву, которой предшествует содержимое $studyплюс один произвольный символ ( Tв вашем примере) и за которой следует конец строки.

Опция -P(регулярные выражения Perl) необходима для использования положительного выражения просмотра назад (?<=...), но может быть доступна не во всех системах и платформах.

решение2

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

возвращает только результат, если последний символ — «A» или «X»

решение3

Решение perl:

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

Или, если вы можете использовать bash:

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

Связанный контент