
ディレクトリに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