将部分文件名分配给bash变量?

Sal*_*ork 4 bash shell

我有一个文件,它的名字如下:

12U12345._L001_R1_001.fastq.gz
Run Code Online (Sandbox Code Playgroud)

我想将变量分配给12U12345零件.

到目前为止,我有:

variable=`basename $fastq | sed {s'/_S[0-9]*_L001_R1_001.fastq.gz//'}`
Run Code Online (Sandbox Code Playgroud)

注意:$fastq是一个变量,其中包含文件的完整路径.

这个解决方案目前返回完整的文件名,任何想法如何做到这一点?

Ini*_*ian 5

只需使用shell提供的内置参数扩展,而不是生成一个单独的进程

fastq="12U12345._L001_R1_001.fastq.gz"
printf '%s\n' "${fastq%%.*}"
12U12345
Run Code Online (Sandbox Code Playgroud)

或者用printf()它来一次性存储到一个新的变量

printf -v numericPart '%s' "${fastq%%.*}"
printf '%s\n' "${numericPart}"
Run Code Online (Sandbox Code Playgroud)

还有bash一个内置的正则表达式比较运算符,=~用你可以做的表示

fastq="12U12345._L001_R1_001.fastq.gz"
regex='^([[:alnum:]]+)\.(.*)'

if [[ $fastq =~ $regex ]]; then
    numericPart="${BASH_REMATCH[1]}"
    printf '%s\n' "${numericPart}"
fi
Run Code Online (Sandbox Code Playgroud)

  • `numericPart = $ {fastq %%.*}`也适用. (6认同)