首页 > 解决方案 > 如何提取字符串中第一个下划线之前的所有内容?

问题描述

我有这样命名的文件:

MG-AB-110_S101_R2_001.fastq.gz, MG-AB-109_S100_R1_001.fastq.gz...

我试图提取第一个下划线之前的所有内容,以便得到:MG-AB-110,MG-AB-109 ...

我试图这样做:

name="MG-AB-110_S101_R2_001.fastq.gz"
base_name=${name%%.*}
echo $base_name
MG-AB-110_S101_R2_001

和这个:

base_name=${name%%(.*?)_.* }
echo $base_name
MG-AB-110_S101_R2_001.fastq.gz

我需要这些基本名称来匹配另一个文件夹中的基本名称,所以上面的正则表达式将成为这个循环的一部分:

#!/bin/bash

for name in test1/*.gz; do
    base_name=${name%%.*}

    if [ -f "test2/$base_name" ]; then
        cat "$name" "test2/$base_name" >"all_combined/$base_name"
    else
         printf 'No file in test2 corresponds to "%s"\n' "$name" >&2
    fi
done

标签: stringbash

解决方案


使用 bash 及其参数扩展

name="MG-AB-110_S101_R2_001.fastq.gz"
echo "${name%%_*}"

输出:

MG-AB-110

推荐阅读