我想替换以">"开头的行中的所有非字母数字字符。但不能替换">"。
例如。
>header 44554%782 & -GB
会变成
>header44554782GB
另外想了解更多,如何指定多个" protected"非alpha / num字符,例如,如果我想保留">"和空格或空格和下划线。
这让我在那里中途(删除所有非字母数字)。
sed '/^>/s/[^a-zA-Z0-9]//g'
有什么想法吗?
更新
我没有提供有关我的数据结构的足够信息。
我需要处理的文本文件示例如下:
>gi-565662%% 2s-0[protein]
MPPACTYUSYUUSUSUSUSUUSU
SKKKYTYSSALLATLLAY
>gi|47234377324|+98923[protein]
ATTYTYTFYATYFTTTFARRRLAVVVATPATYTKKKK
>gi|23432|bysg==+4D77
TYTYATCYACTAYCTYATYCTAC
ACTYATCYATCYATCYATC
TPAPPAPPCAPPAPCPAC
答案 0 :(得分:3)
您可以使用现有代码,并在替换后重新插入前导>
:
#!/usr/bin/sed -f
/^>/{
s/[^a-zA-Z0-9]//g
s/^/>/
}
答案 1 :(得分:0)
sed(Stream EDitor)能够执行您指定的操作,但更简单的工具可能更合适。如果你的系统有sed,它也可能有tr。用tr你可以做到:
$ hdr=$(echo '>header 44554%782 & -GB' | tr -dc '>a-zA-Z0-9');
$ echo $hdr
>header44554782GB
-c选项告诉tr匹配'> a-zA-Z0-9'中指定的字符集的补码,而-d选项告诉tr删除匹配的字符。
答案 2 :(得分:0)
这可能更简单
sed -r '/^[>].*/{s/[^[:alnum:]_> ]//g}
例如
echo '>header _44554%782? & -GB'|sed -r '/^[>].*/{s/[^[:alnum:]_> ]//g}'
ouptut
>header _44554782 GB
> _ and space character protected
答案 3 :(得分:-1)
你喜欢这样:
String result = yourString.replaceAll("[\\W&&[^<]]", "");
已编辑:
var txt = String(">header 44554%782 & -GB");
var exec = txt.replace(/[^>][\W]/g, "");
alert(exec);//>heade445578-GB