string - 从字符串中删除两个子字符串

标签 string bash

我有一个这样的文件列表:

wgEncodeCaltechRnaSeqGm12878R1x75dFastqRep1.fastq.trim.tags.sam
wgEncodeCaltechRnaSeqGm12878R1x75dFastqRep2.fastq.trim.tags.sam
wgEncodeCshlLongRnaSeqGm12878CellPapFastqRd1Rep1.fastq.trim00.tags.sam
wgEncodeCshlLongRnaSeqGm12878CellPapFastqRd1Rep1.fastq.trim01.tags.sam
wgEncodeCshlLongRnaSeqGm12878CellPapFastqRd1Rep1.fastq.trim02.tags.sam
wgEncodeCshlLongRnaSeqGm12878CellPapFastqRd1Rep2.fastq.trim00.tags.sam
wgEncodeCshlLongRnaSeqGm12878CellPapFastqRd1Rep2.fastq.trim01.tags.sam
wgEncodeCshlLongRnaSeqGm12878CellPapFastqRd1Rep2.fastq.trim02.tags.sam
wgEncodeCshlLongRnaSeqGm12878CellPapFastqRd2Rep1.fastq.trim00.tags.sam
wgEncodeCshlLongRnaSeqGm12878CellPapFastqRd2Rep1.fastq.trim01.tags.sam

我想从文件名中删除 Rd1、Rd2 和 .sam 字符串。使用以下 bash 脚本,我可以使用两个命令删除 Rd1、Rd2 和 .sam 字符串....

for i in $(ls)

do

echo "${i/Rd?/}"
echo "${i/.sam/}"

done

但我想知道如何一步完成两个替换 你知道怎么做吗?

感谢您的宝贵时间!

最佳答案

您可以使用扩展模式在 bash 中完成这一切。

shopt -s extglob
echo ${i//@(Rd?|.sam)}

这是分割:

  1. 使用 // 替换所有出现的模式,而不仅仅是第一个。
  2. @(Rd?|.sam) 是一个扩展模式,匹配 either Rd?.sam。这 管道分隔两个子模式。

从技术上讲,您希望能够避免从单词的中间删除“.sam”, 但看起来这对您的用例来说是安全的。

关于string - 从字符串中删除两个子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11056320/

相关文章:

c# - 在字符串中的两个值之间查找单词

linux - 输出文件内容,每个文件之间有一个额外的换行符

bash - 在 bash 脚本中,查看并使用完整的命令行

c++ - 生成超立方体链接数据

.net - StringBuilder.Replace() 比 String.Replace 更有效吗?

iOS -- 字符串 -- 在特定位置插入字符串

c# - 如何在 C# 中获取特定的文化数字模式

c# - 字符串 .split c# 引发 IndexOutOfRangeException

linux - 将文件复制到最新的目录

python - 如何在 papermill 中参数化 Python 字典?