Shell 参数扩展

Shell 参数扩展

我已经完成了以下参数 shell 扩展:

trihead="$(cat ../FASTA_SEC/"$i".fa)"
echo "${trihead#"${trihead%%[!A]*}"}" > ../FASTA_SEC/"$i".fa

我想修剪 fasta 文件第二行的前导 A(一种纯文本格式 .fa)

输入将类似于:

>B4-0K032_18670_015
AAAAAAANNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNGNNNTAGATACAAGCGAGCGGC

我希望输出如下:

>B4-0K032_18670_015
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNGNNNTAGATACAAGCGAGCGGC

顺便问一下,有人知道 shell 参数扩展的某些方面得到了很好的解释吗?

答案1

将前导连续As 从第二文件的一行(然后用结果替换原始文件):

$ sed '2s/^A*//' data.fa >data.out  &&  mv data.out data.fa

在此示例中,该sed命令专门将替换命令 ( ) 应用于第 2 行。s它将A把行开头的任意数量的 s 替换为空。

该模式^A*的意思是“匹配行( ) 开头的*单个字符的零个或多个 ( )”。A^

我不使用sed -i(“就地编辑”)的原因是该标志在实现-i之间非常不可移植。sed

答案2

这将从A以 开头的行后面的行中删除所有前导 s >

sed '/^>/n;s/^A*//' /path/to/file

如果输出是您想要的,并且您想编辑原始文件,请使用:

sed --in-place '/^>/n;s/^A*//' /path/to/file

相关内容