两次匹配之间的Sed打印,并替换为信息

时间:2014-12-19 10:39:18

标签: regex bash sed fastq

我希望从几行文件中获取一个ID,然后在使用sed之前和之后添加一些信息 - 我不想使用其他任何内容。 例如 原始行看起来像:

19F_4414_2.aln:>tai19F_14 Taiwan19F_14

我想打印:

pathfind -t lane -id tai19F_14 -f fastq -l .

到目前为止,我有:

grep ">" 19F_4414*.aln | sed -e 's/^.*>/pathfind -t lane -id /1; s/ .*//5'

第一次替换有效,但第二部分没有。如果我添加星号,它不会替换该行的结尾,但是单个句点只替换一个字母。如果你能告诉我原因,以及如何解决这个问题。

4 个答案:

答案 0 :(得分:1)

你可以这样做:

sed 's/>\([^[:blank:]]*\).*$/pathfind -t lane -id \1 -f fastq -l ./' 19F_4414*.aln
pathfind -t lane -id tai19F_14 -f fastq -l .

答案 1 :(得分:1)

我会这样尝试

sed 's/.*aln:>\(\S*\).*/pathfind -t lane -id \1 -f fastq -l/g'

答案 2 :(得分:0)

这有效:

sed -e 's/^.*>/pathfind -t lane -id /1; s/ [^ ]*$/ -f fastq -l ./'

[^ ]*$在行尾($)之前直接匹配每个非空格。

答案 3 :(得分:0)

sed -r 's/^.*>(.*) .*/pathfind -t lane -id \1 -f fastq -l/文件名。