使用s命令替换变量

时间:2014-11-26 18:54:44

标签: regex perl text-processing substitution

我需要在QIIME中替换不正确的Illumina fasta标头以进行格式化,并且此脚本不能像我想的那样工作。我需要能够输入变量并使用unix“s”命令。有什么想法吗?

print 'What is the exact sequence of characters to replace? ';
chomp (my $seq_char = <> );
print 'What is the new label to attach? ';
chomp (my $label = <> );

while( $seq = $seq_in->next_seq() )
{
        my $seqName = $seq->id;
        $seqName =~ s/\'$seq_char'/\'$label' /g; #replace original characters with new label
        $seqName =~ s/(gi\.\w*)\..*/$1/;

2 个答案:

答案 0 :(得分:1)

你似乎有一些流浪的单引号:

my $seqName = "foobar";
my $seq_char = "foo";
my $label = "HELLO";
$seqName =~ s/\Q$seq_char/$label/g;
say $seqName;
HELLObar

尝试坚持使用一种变量样式:你有camelCaseword_style - 这是个人偏好,但选择一个并坚持下去。

另请参阅:http://perldoc.perl.org/perlstyle.html

答案 1 :(得分:0)

你的意思是sed命令吗?

你也可以使用Bash单线程: cat {your_file} | sed 's/\(gi\.\w*\)\..*/\1/' | sed 's/$seq_char/$label /g'

请注意正则表达式模式,例如:

echo gi.1234562.123124 | sed 's/\(gi\.\w*\)\..*/\1/'

输出

gi.1234562

并且将使用sed 's/$seq_char/$label /g'

插入一个空格