Intereting Posts
Есть ли способ перечислить последние транзакции графического интерфейса в Linux? История Bash с метками времени Соединение ssh отказалось от того же ПК при выходе за пределы локальной сети Распаковка некоторых архивов работает на Windows, но не на Linux Автоматически сохранять историю команд bash в сеансе сеанса Значение суммы рядом с определенным шаблоном Что означает «размер в 512-байтных блоках»? Зависимости между совместно используемыми библиотеками в тех же пакетах Debian Как использовать NMCLI для создания Wifi-соединения и подключения к SSID через WPA? Как добавить графический интерфейс к минимальной установке CentOS? Не удалось удалить пакет openmediavault из-за ошибки сценария postrm Можем ли мы смешать значения MTU в кластере / var / log / syslog опустели Привяжите Cj к обратному-kill-word, говорит, что команда не найдена найти и заменить значение в строке текста

Извлечь часть строки, используя grep

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

MYO144064T MYO144064TA MYO144064TX 

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

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

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

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

Что дает мне

 A X 

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

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

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

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

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

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

Решение perl :

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

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

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