我有一个文件,它的名字看起来像:
12U12345._L001_R1_001.fastq.gz
我想仅将
12U12345
部分分配给变量。到目前为止,我有:
variable=`basename $fastq | sed {s'/_S[0-9]*_L001_R1_001.fastq.gz//'}`
注意:
$fastq
是一个变量,其中包含文件的完整路径。此解决方案当前返回完整的文件名,任何想法如何正确地做到这一点?
最佳答案
只需使用shell提供的内置参数扩展,而不是产生一个单独的进程
fastq="12U12345._L001_R1_001.fastq.gz"
printf '%s\n' "${fastq%%.*}"
12U12345
或使用
printf()
本身一次性存储到新变量printf -v numericPart '%s' "${fastq%%.*}"
printf '%s\n' "${numericPart}"
此外
bash
有一个内置的正则表达式比较运算符,由 =~
表示,您可以使用它fastq="12U12345._L001_R1_001.fastq.gz"
regex='^([[:alnum:]]+)\.(.*)'
if [[ $fastq =~ $regex ]]; then
numericPart="${BASH_REMATCH[1]}"
printf '%s\n' "${numericPart}"
fi
关于bash - 将文件名的一部分分配给 bash 变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49453857/