Regex 使用sed更改文件中的事件时出现问题
我有一个文件,其中有几行:Regex 使用sed更改文件中的事件时出现问题,regex,bash,sed,Regex,Bash,Sed,我有一个文件,其中有几行: OTU3055 UniRef90_A0A0F7KBB1 UniRef90_A0A1Z9IPT2 OTU0856 OTU53699 UniRef90_D6PC25 UniRef90_D6PCA5 UniRef90_D6PCG3 OTU0125 UniRef90_A0A075FUN0 UniRef90_A0A075G8Q1 UniRef90_A0A075GDT2 我想删除文件中出现的所有OTUxxx事件(在“OTU”之后总是有4个数字)。我使用了sed,但它不起作用。O
OTU3055 UniRef90_A0A0F7KBB1 UniRef90_A0A1Z9IPT2
OTU0856 OTU53699 UniRef90_D6PC25 UniRef90_D6PCA5 UniRef90_D6PCG3
OTU0125 UniRef90_A0A075FUN0 UniRef90_A0A075G8Q1 UniRef90_A0A075GDT2
我想删除文件中出现的所有OTUxxx事件(在“OTU”之后总是有4个数字)。我使用了sed
,但它不起作用。OTUxxx始终出现在行的开头
sed的/OTU[0-9]{4}//g'my_file.txt
我在OTU[0-9]{4}
后面放了一个空格,因为我希望Uniref90 id位于eacg行的开头
编辑:
sed-r的/OTU[0-9]{4}//g'my_file.txt。但我还有一个问题
UniRef90_A0A0F7KBB1 UniRef90_A0A1Z9IPT2
UniRef90_D6PC25 UniRef90_D6PCA5 UniRef90_D6PCG3
UniRef90_A0A075FUN0 UniRef90_A0A075G8Q1 UniRef90_A0A075GDT2
有些行仍然以空格开头。我尝试了sed的/^*/'my_file.txt,但它不起作用。我希望文件的第二行与其他两行一样开始,没有任何空格。您可以使用
sed -r 's/[[:space:]]*\bOTU[0-9]{4,}\b[[:space:]]*//g' file > newfile
或者,如果可以在任何地方找到匹配项,而不仅仅是在字符串开头:
sed -r 's/[[:space:]]*\bOTU[0-9]{4,}\b//g' file | sed 's/[[:space:]]*$//' > newfile
OTU
后面的空格将与第二个代码段不匹配,因此需要使用管道sed
命令
看
详细信息
-0+空格字符[[:space:][]*
单词边界\b
-OTU[0-9]{4,}
和4位或更多数字OTU
-单词边界\b
-0+空格字符[[:space:][]*
-E
:
$ sed -E 's/(OTU[0-9]{4,}[[:space:]]+)+//' file
UniRef90_A0A0F7KBB1 UniRef90_A0A1Z9IPT2
UniRef90_D6PC25 UniRef90_D6PCA5 UniRef90_D6PCG3
UniRef90_A0A075FUN0 UniRef90_A0A075G8Q1 UniRef90_A0A075GDT2
将选项
-r
添加到GNU-sed。或者用\来转义两个花括号。我注意到前面的命令可以工作,但对于某些行,某些行开头的“空白”没有删除。它对一些人有效,但对其他人无效。你有什么想法吗?我尝试了sed的my_file.txt。试试sed-r的//[:space:]*\bOTU[0-9]{4,}\b[:space:]*//g'文件
,检查。如果您使用-E
而不是-r
,那么它将在GNU和OSX/BSD sed中工作,而不仅仅是GNU sed。@EdMorton是的,对。