grepを使用して文字列の一部を抽出する

grepを使用して文字列の一部を抽出する

ディレクトリに3つのファイルがあります

MYO144064T
MYO144064TA
MYO144064TX

数字と11番目の文字が変更される場所。私のcshスクリプトでは、おそらくgrepを使用して文字「A」と「X」を抽出したい。

変数$studyはMYO144064に等しい

これまで私が管理してきたものは非常に面倒です

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

それは私に

A
X

最小限のプロセスで、追加の空白行なしでこれを実行するにはどうすればよいですか?

答え1

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

$studyは、 の内容に任意の 1 文字 (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

関連情報