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