我有一个这样的文件列表:
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)}
这是分割:
- 使用
//
替换所有出现的模式,而不仅仅是第一个。 @(Rd?|.sam)
是一个扩展模式,匹配 eitherRd?
或.sam
。这 管道分隔两个子模式。
从技术上讲,您希望能够避免从单词的中间删除“.sam”, 但看起来这对您的用例来说是安全的。
关于string - 从字符串中删除两个子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11056320/