
У меня есть 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