string - 如何提取字符串中第一个下划线之前的所有内容?

标签 string bash

我有这样命名的文件:

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

最佳答案

使用 bash 及其 Parameter Expansion :

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

输出:

MG-AB-110

关于string - 如何提取字符串中第一个下划线之前的所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67992769/

相关文章:

c# - 用于将双数组转换为逗号分隔字符串的 lambda 表达式

从 String 中提取 ID 的 Java regex 和/或 string magic

string - 为什么 Haskell 在处理字符串时分配大量内存?

c++ - C++ 中的 'string()+char'

linux - tail 和 grep + 打印并退出第一场比赛

bash - 测试编译代码以返回预期输出/错误的最佳方法

bash - 在管道命令的输出中添加一行

linux - sed 从文件中注释行号 x 到 y

字符串操作的 C 语法建议?

linux - 如何查找/杀死特定的 python 程序