sed:替换除“以外的所有非字母数字字符&燃气轮机&引用;

sed:替换除“以外的所有非字母数字字符&燃气轮机&引用;,sed,Sed,我想替换以“>”开头的行中的所有非字母数字字符,但不替换“>” 例如 将成为 >header44554782GB 我还想更一般地了解如何指定多个“受保护”的非alpha/num字符,例如,如果我想保留“>”和空格或空格和下划线 这让我半途而废(删除所有非字母数字) 有什么想法吗 更新 我没有提供足够的数据结构信息 我需要处理的文本文件示例如下: >gi-565662%% 2s-0[protein] MPPACTYUSYUUSUSUSUSUUSU SKKKYTYSSALLATLLAY

我想替换以“>”开头的行中的所有非字母数字字符,但不替换“>”

例如

将成为

>header44554782GB
我还想更一般地了解如何指定多个“受保护”的非alpha/num字符,例如,如果我想保留“>”和空格或空格和下划线

这让我半途而废(删除所有非字母数字)

有什么想法吗

更新

我没有提供足够的数据结构信息

我需要处理的文本文件示例如下:

>gi-565662%% 2s-0[protein]
MPPACTYUSYUUSUSUSUSUUSU
SKKKYTYSSALLATLLAY
>gi|47234377324|+98923[protein]
ATTYTYTFYATYFTTTFARRRLAVVVATPATYTKKKK
>gi|23432|bysg==+4D77
TYTYATCYACTAYCTYATYCTAC
ACTYATCYATCYATCYATC
TPAPPAPPCAPPAPCPAC
你喜欢这样:

String result = yourString.replaceAll("[\\W&&[^<]]", "");
sed(流编辑器)能够执行您指定的操作,但更简单的工具可能更合适。如果您的系统有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删除匹配的字符。

您可以使用现有代码,并在替换后重新插入前导的

#!/usr/bin/sed -f
/^>/{
s/[^a-zA-Z0-9]//g
s/^/>/
}
这可能更简单

sed -r '/^[>].*/{s/[^[:alnum:]_> ]//g}
范例

echo '>header _44554%782? & -GB'|sed -r '/^[>].*/{s/[^[:alnum:]_> ]//g}'
乌普图

>header _44554782  GB


我想和塞德一起做。标题的修剪是管道的一部分,需要在数百万行上进行。我认为您希望更改“^”。这看起来不像我见过的任何类型的sed。我正在寻找一种在sed中执行此操作的方法。我需要浏览数百万行文字。以“>”开头的行只是序列的标题或ID。我想我没有充分描述数据。我正在使用的文本文件有一个标题行(以“>”开头),然后是多行字母,然后是不同的标题行(以>)行,然后是多行字母,大约有100000个标题。你可以逐行操作,这是最快的方法,它的工作方式与我希望的不完全一样。我有1000个标题,每个都有以下字母序列:
>标题$%hh2 MPICUACC>header4@#B ATCYACYAC
等应该跨行拆分的命令?如果使用GNU,可以通过将换行符替换为
,将命令合并到一行中。POSIX中没有指定这一点,并且不是所有的实现都支持它。如果您确实不想将程序放在自己的文件中,那么可以在命令行上使用多个sed语句,这看起来像
sed-e'/^>/{-e's/[^a-zA-Z0-9]//g'-e's/^/>/'-e'}
。就我个人而言,我发现这一点很快就会变得难以理解。
sed -r '/^[>].*/{s/[^[:alnum:]_> ]//g}
echo '>header _44554%782? & -GB'|sed -r '/^[>].*/{s/[^[:alnum:]_> ]//g}'
>header _44554782  GB
   > _ and space character protected