原来sed不支持非贪婪匹配
场景
从GISAID上面批量下载下来的序列id很长,格式如下:
太长了,并且makeblastdb的时候-parse_seqids参数会导致报错,大概是长度太长不符合要求无法处理之类的。
不作处理去掉-parse_seqids也没问题,不过怕后期引起不必要的麻烦,这个时候就需要处理一下这些id
sed
想着直接sed处理一下就好,因为有两个“|”存在,结果发现sed没法做到非贪婪……
grep '>' ../gisaid.fasta|sed s/hMpxV.*?\|//g|less
没效果啊~
添加-r
用扩展的正则也没用~
看help,sed
也没有-p
参数……
原来sed并不支持“非贪婪”的正则,有地方是这么解释的:
https://www.codenong.com/40117611/
https://qa.1r1g.com/sf/ask/2808232801/
大概就是说非贪婪匹配是通过perl的PCRE引入主流的,而sed的规范比PCRE早了好几年……
有点难以令人信服……
解决
不支持就绕道吧,不要中间有“|”就得了
grep '>' ../gisaid.fasta|sed s/hMpxV[^\|]*\|//g|less
就这样吧
sed -i s/hMpxV[^\|]*\|//g gisaid.fasta
sed -i s/\|.*//g gisaid.fasta
原来sed不支持非贪婪匹配的更多相关文章
- VIM 用正则表达式,非贪婪匹配,匹配竖杠,竖线, 匹配中文,中文正则,倒数第二列, 匹配任意一个字符 :
VIM 用正则表达式 批量替换文本,多行删除,复制,移动 在VIM中 用正则表达式 批量替换文本,多行删除,复制,移动 :n1,n2 m n3 移动n1-n2行(包括n1,n2)到n3行之下: ...
- php正则贪婪匹配与非贪婪匹配一些例子
http://www.111cn.net/phper/210/55600.htm 贪婪模式匹配的原则是: 在可匹配也可不匹配的情况下, 优先匹配,直到不能匹配成功的情况下,记录备选状态,并把匹配控制交 ...
- PHP正则 贪婪匹配与非贪婪匹配
$str = ".abcdeabcde"; preg_match('/a.+?e/', $str, $match); print_r($match); Array ( [0] =& ...
- Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配
Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配 //贪婪匹配 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); ...
- 正则表达式 整理(\w \s \d 点 贪婪匹配 非贪婪匹配 * + ? {} | [] ^ $ \b 单词边界 分组、re.findall()、re.split()、re.search()、re.match()、re.compile()、re.sub())
re.findall 匹配到正则表达式的字符,匹配到的每个字符存入一个列表,返回一个匹配到的所有字符列表 一. 匹配单个字符 import re # \w 匹配所有字母.数字.下划线 re.find ...
- shell 中 贪婪匹配 和 非贪婪匹配
举个栗子: v=jfedu.shiyiwen.com echo ${v%.*} 一个%为非贪婪匹配,即匹配最短结果.%从右到左进行非贪婪匹配,匹配什么呢? 匹配已 .*的字符. 那么当然是匹配到了.c ...
- re模块中的非贪婪匹配
python的re模块中有贪婪匹配和非贪婪匹配之分,当使用*时会匹配零个或多个,使用+时会匹配一个或多个.当使用?在前边特殊符号前时会进行非贪婪匹配,匹配零个或者一个,今天主要讨论非贪婪匹配中存在的坑 ...
- re 正则匹配的非贪婪匹配
非贪婪匹配 将尽可能少的匹配内容,当?出现在其他的重复次数后面时会将贪婪模式改为非贪婪模式. ? 如 abc.*? abc.+? 非贪婪匹配:尽可能少的匹配{n,}?{,n}?{n,m}?*? # * ...
- 廖雪峰Java9正则表达式-2正则表达式进阶-5非贪婪匹配
1.贪婪匹配 问题:给定一个字符串表示的数字,判断该数字末尾0的个数? "123000": 3个0 "10100": 2个0 "1001": ...
- 正则表达式之前戏、字符组、量词、特殊符号、贪婪与非贪婪匹配等,python正则模块之re
目录 正则表达式前戏 正则表达式之字符组 正则表达式之特殊符号 正则表达式之量词 贪婪匹配与非贪婪匹配 转义符 正则表达式实战建议 re模块 re模块补充说明 作业 正则表达式前戏 案例:京东注册手机 ...
随机推荐
- STM32F0使用LL库实现UART接收
初始化: 1 void MX_USART1_UART_Init(void) 2 { 3 4 /* USER CODE BEGIN USART1_Init 0 */ 5 6 /* USER CODE E ...
- 取得SAP服务器主机名(host name)和端口号(port)函数[TH_GET_VIRT_HOST_DATA]
本文转载至:http://www.baidusap.com/abap/function/4245 是要Vcode开发abap的时候,连接服务器的时候需要端口号,可以用函数TH_GET_VIRT_HOS ...
- 瑞士军刀 sox 系列 :给.raw文件添加header变身.wav文件
1.先去安装 sox https://sourceforge.net/projects/sox/files/sox/ 2.将sox的安装目录加到系统path变量里. 3.开始执行命令 sox -t r ...
- 【STM32】串口收发驱动Drv_Uart|学习笔记
一.什么事串口? 大家常说串口,其实串口有很多种UART,SPI,IIC都是串口,一般大家口中的串口就是UART(Universal Asynchronous Receiver/Transmitter ...
- tp insertAll与saveAll
在批量插入数据时 insertAll是Db类的,而saveAll是基于模型的
- maven profile 的作用
maven 的profile 可以是我们通过编译时指定 -P 来实现 使用不同的 属性变量. 比如: <profiles> <profile> <id>local ...
- vvv动态组件和keep-alive
<!DOCTYPE html><html> <head> <style> </style> <script src="a.j ...
- cc1
基础 cc接口及类介绍 Transformer接口 Defines a functor interface implemented by classes that transform one obje ...
- VScode打开文件夹位置技巧
VScode在打开文件夹,弹出对话框的时候,去文件夹(应用)到达该路径,对话框中的路径自动变为当前文件夹(应用)的路径.去文件夹(应用)到达该路径
- 【C学习笔记】day2-2 不允许创建临时变量,交换两个数的内容(附加题)
#include<stdio.h> int main() { int a=0, b=1; int m[2]; m[0] = a; m[1] = b; a = m[1]; b = m[0]; ...