我有一个包含多个条目的文件,我想在其中替换每个条目的标题。
文件内容如下所示:
>gi|215277009|ref|NR_024540.1| Homo sapiens WAS protein family homolog 7 pseudogene (WASH7P), non-coding RNA
RNARNARNARNARNA
>gi|389886562|ref|NR_046018.2| Homo sapiens DEAD/H (Asp-Glu-Ala-Asp/His) box helicase 11 like 1 (DDX11L1), non-coding RNA
MORERNARNARNARNA
RNARNARNARNARNA
...
我想做这样的事情:
>NR_024540
RNARNARNARNARNA
>NR_046018
MORERNARNARNARNA
RNARNARNARNARNA
现在我编写了一个正则表达式,当我在perl
(在一个测试字符串中)运行它时工作正常,但是当我运行以下sed
命令(在ubuntu中)时,没有任何反应。这个命令出了什么问题?
sed -ri 's/\>[\w\|]+\|ref\|(\w+)\.\d+\|.*/\>\1/g' rna_copy.fa
答案 0 :(得分:2)
Awk将是一个更好的工具:
awk -F\| '/^>/{print ">"$4;next}1' test.in
或
awk -F\| '/^>/{$0=">"$4}1' test.in
-F\|
将字段分隔符设置为|
,
/^>/
在以>
开头的行上执行该块
">"$4
仅打印您感兴趣的部分,
next
跳到下一行,然后是
1
打印整行。
在第二个中,$0=">"$4
将行设置为;然后由于1
打印出来。
答案 1 :(得分:2)
sed
不使用\w
或\d
。你必须改用字符类。
sed -r 's/>[[:alnum:]\|]+\|ref\|([a-zA-Z0-9_]+\.[[:digit:]]).*/> \1/g'
答案 2 :(得分:2)
GNU代码sed:
sed -r 's/.*\|(\w+)\.[0-9]+\|.*/>\1/' file
$sed -r 's/.*\|(\w+)\.[0-9]+\|.*/>\1/' file >NR_024540 RNARNARNARNARNA >NR_046018 MORERNARNARNARNA RNARNARNARNARNA
GNU sed适用于\w
,但不适用 \d
。