Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 匹配固定字符串+;数字0-10和grep_Regex_Bash_Grep - Fatal编程技术网

Regex 匹配固定字符串+;数字0-10和grep

Regex 匹配固定字符串+;数字0-10和grep,regex,bash,grep,Regex,Bash,Grep,我有这样一个文件列表: Sample_lane1-Bob10_R1.fastq.gz Sample_lane1-Bob1_R1.fastq.gz Sample_lane1-Bob2_R1.fastq.gz Sample_lane1-Bob4_R1.fastq.gz Sample_lane1-Bob5_R1.fastq.gz Sample_lane1-Bob7_R1.fastq.gz Sample_lane1-Bob8_R1.fastq.gz Sample_lane1-Bob9_R1.fastq.

我有这样一个文件列表:

Sample_lane1-Bob10_R1.fastq.gz
Sample_lane1-Bob1_R1.fastq.gz
Sample_lane1-Bob2_R1.fastq.gz
Sample_lane1-Bob4_R1.fastq.gz
Sample_lane1-Bob5_R1.fastq.gz
Sample_lane1-Bob7_R1.fastq.gz
Sample_lane1-Bob8_R1.fastq.gz
Sample_lane1-Bob9_R1.fastq.gz
Sample_lane2-Bob10_R1.fastq.gz
Sample_lane2-Bob1_R1.fastq.gz
Sample_lane2-Bob3_R1.fastq.gz
Sample_lane2-Bob4_R1.fastq.gz
Sample_lane2-Bob6_R1.fastq.gz
Sample_lane2-Bob7_R1.fastq.gz
Sample_lane2-Bob8_R1.fastq.gz
Sample_lane2-Bob9_R1.fastq.gz
Sample_lane3-Bob11_R1.fastq.gz
Sample_lane3-Bob12_R1.fastq.gz
Sample_lane3-Bob13_R1.fastq.gz
Sample_lane3-Bob15_R1.fastq.gz
Sample_lane3-Bob16_R1.fastq.gz
Sample_lane3-Bob18_R1.fastq.gz
Sample_lane3-Bob19_R1.fastq.gz
Sample_lane3-Bob20_R1.fastq.gz
Sample_lane5-Bob11_R1.fastq.gz
Sample_lane5-Bob12_R1.fastq.gz
Sample_lane5-Bob16_R1.fastq.gz
Sample_lane5-Bob17_R1.fastq.gz
Sample_lane5-Bob19_R1.fastq.gz
Sample_lane5-Bob20_R1.fastq.gz
Sample_lane8-Sample1_R1.fastq.gz
Sample_lane8-Sample2_R1.fastq.gz
Sample_lane8-Sample3_R1.fastq.gz
Sample_lane8-Sample4_R1.fastq.gz
Sample_lane8-Sample5_R1.fastq.gz
为了执行一些下游操作,我只想通过“Bob10”返回标记为“Bob1”的文件,同样,我想通过“Bob20”返回标记为“Bob11”的文件

我一直在尝试使用
grep
对正则表达式执行此操作,但无法同时匹配“Bob”和相邻的数值范围。例如,这是许多行中不起作用的一行:

grep -E "Bob@([10|0-9])"
根据我在网上找到的不同教程,我在不同的地方尝试了许多不同的组合,包括
Bob
10 | 0-9
()
[]
,但迄今为止都没有成功

编辑:为了完整起见,@anubhava给出的解决方案解决了上述问题:

grep -E "Bob(10|[0-9])_"
我并没有特别要求正则表达式返回范围的另一半“Bob11”-“Bob20”,但根据第页,我为它提出了这个解决方案:


您可以对文件使用此regex for
grep

grep -E "Bob(10|[0-9])_" file
但是,如果在目录中使用
glob
模式,则使用此
扩展glob

shopt -s extglob
printf "%s\n" *Bob@(10|[[:digit:]])_*
输出:

Sample_lane1-Bob10_R1.fastq.gz
Sample_lane1-Bob1_R1.fastq.gz
Sample_lane1-Bob2_R1.fastq.gz
Sample_lane1-Bob4_R1.fastq.gz
Sample_lane1-Bob5_R1.fastq.gz
Sample_lane1-Bob7_R1.fastq.gz
Sample_lane1-Bob8_R1.fastq.gz
Sample_lane1-Bob9_R1.fastq.gz
Sample_lane2-Bob10_R1.fastq.gz
Sample_lane2-Bob1_R1.fastq.gz
Sample_lane2-Bob3_R1.fastq.gz
Sample_lane2-Bob4_R1.fastq.gz
Sample_lane2-Bob6_R1.fastq.gz
Sample_lane2-Bob7_R1.fastq.gz
Sample_lane2-Bob8_R1.fastq.gz
Sample_lane2-Bob9_R1.fastq.gz

如果您使用的工具可以进行数学运算,而不是依赖regexp,那么您可以选择任何您喜欢的范围:

$ awk -F'-Bob|_' '$3+0>7 && $3+0<13' file       
Sample_lane1-Bob10_R1.fastq.gz
Sample_lane1-Bob8_R1.fastq.gz
Sample_lane1-Bob9_R1.fastq.gz
Sample_lane2-Bob10_R1.fastq.gz
Sample_lane2-Bob8_R1.fastq.gz
Sample_lane2-Bob9_R1.fastq.gz
Sample_lane3-Bob11_R1.fastq.gz
Sample_lane3-Bob12_R1.fastq.gz
Sample_lane5-Bob11_R1.fastq.gz
Sample_lane5-Bob12_R1.fastq.gz

$awk-F'-Bob |"3+0>7&&3+0感谢您的快速回复。这就是解决方案:
grep-E“Bob(10 |[0-9])_“
。结果表明,尾随的“u”起了作用,因为除此之外,Bob11-Bob20的匹配也会不断返回,因为“
Bob1
x”和“
Bob2
x”也与原始模式匹配。
$ awk -F'-Bob|_' '$3+0>7 && $3+0<13' file       
Sample_lane1-Bob10_R1.fastq.gz
Sample_lane1-Bob8_R1.fastq.gz
Sample_lane1-Bob9_R1.fastq.gz
Sample_lane2-Bob10_R1.fastq.gz
Sample_lane2-Bob8_R1.fastq.gz
Sample_lane2-Bob9_R1.fastq.gz
Sample_lane3-Bob11_R1.fastq.gz
Sample_lane3-Bob12_R1.fastq.gz
Sample_lane5-Bob11_R1.fastq.gz
Sample_lane5-Bob12_R1.fastq.gz