我正在寻找一些使用狂野角色进行搜索和替换的线性解决方案..
输入:
>sequence1
ATGCCAAACTGGAACT[A/T]ATTCAATGGCATGGACATAAATTC[A/C]ATACAATTACAAA
>sequnce2
ATCAAACCGGTATGTACATT[A,T/G]ATTCATTACTA
输出:
>sequence1
ATGCCAAACTGGAACTNATTCAATGGCATGGACATAAATTCNATACAATTACAAA
>sequnce2
ATCAAACCGGTATGTACATTNATTCATTACTA
我需要用“N”代替“[”和“]”中的所有内容。数据长度可能会有所不同 我能够使用awk脚本找到模式,但不知道如何替换它。请帮忙..
awk -F'[][]' '{for(i=2;i<=NF;i=i+2) print $i}' 1.fasta
我尝试的另一件事是vi编辑器
:%s/[.*\]/N/g
使用上面一个,它将所有“[A / T] ATTCAATGGCATGGACATAAATTC [A / C]”替换为N
答案 0 :(得分:4)
尝试这样做:
perl -pe 's/\[.*?\]/N/g' file.txt
说明(关于regex)
s///
是基本替换骨架(适用于perl
或sed
):s/before/after/
s///g
:最后的g
修饰符,表示所有出现 \[
:表示:文字[
(或其他任何反向广告).
:表示:任何字符 *
表示: 0或N个字符 ?
告诉最后一个正则表达式 not greedy 模式那就是说,我有另一个搞笑解决方案:
perl -ne 'print join "N", split /\[.*?\]/;' file.txt
也许更清楚这样?! (但仍然相同)
perl -ne '
print join(
"N",
split(/\[.*?\]/)
);
' file.txt
答案 1 :(得分:0)
sed 's/\[[^]]*\]/N/g' file
编辑:按要求解释:
查找文字“[”([)然后是任何序列的零或多个非“]”字符([^]] *),后跟文字“]”(])并将整个字符串替换为字母N.在每条线上以“g”形式表示。
答案 2 :(得分:0)
只需添加另一个awk单行。 你的目标是替换,不需要玩$ x
awk '{gsub(/\[[^\]]*\]/,"N")}1' file
答案 3 :(得分:0)
这适用于vi编辑器:
%s/\[[^\]]*\]/N/g