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

相关内容