我的目录中有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
将返回任何大写字母,该字母前面是加一个任意字符(在您的示例中)的内容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