使用sed在空格之前查找和替换冒号之间的数字字符串?

时间:2015-06-18 01:12:34

标签: regex sed

我正在尝试将fastq文件中的所有坐标信息更改为零。我的输入文件由以下重复的4行结构中的数百万个条目组成:

@HWI-SV007:140:C173GACXX:6:2215:16030:89299 1:N:0:CAGATC
GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAG  
+              
@@@FFFDFHGGDHIIHGIJJJJJJJJJJJGIJJJJJJJIIIDHGHIGIJJIIIJJIJ

我想以通用方式用零替换第一行16030:89299中的两个数字字符串,以便替换冒号之前的冒号之间的任何数字字符串。我希望输出显示如下,用零替换整个文件中的两个字符串:

@HWI-SV007:140:C173GACXX:6:2215:0:0 1:N:0:CAGATC
GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAG  
+              
@@@FFFDFHGGDHIIHGIJJJJJJJJJJJGIJJJJJJJIIIDHGHIGIJJIIIJJIJ

我正在尝试使用以下sed执行此操作:

sed 's/:^[0-9]+$:^[0-9]+$\s/:0:0 /g' 

但是,这并不像预期的那样。

2 个答案:

答案 0 :(得分:1)

我认为您需要使用sed -r选项。 此外,^匹配行的开头,$匹配行的结尾。 因此,这是针对您的样本的命令行。

sed  -r 's/:[0-9]+:[0-9]+\s/:0:0 /g'

答案 1 :(得分:0)

一些替代

awk -F ":" 'BEGIN{ OFS = ":" }{ if ( NF > 1 ) {$6 = 0; sub( /^[0-9]*/, 0, $7)}; print $0 }' YourFile

使用:

分隔的列
sed 's/^\(\([^:]*:\)\{5\}\)[^[:blank:]]*/\10:0/' YourFile

使用由:空格分隔的5个第一个元素作为分隔符

为你的sed

sed 's/:[0-9]+:[0-9]+\(\s\)/:0:0\1/' 
  • ^$相对于整个字符串而不是当前字词
  • 保留原始空格而不是替换为空格的选项(多个或类似\t的情况)
  • 不需要
  • g(最好不要在这里使用)因为每行只有1次出现
  • 你需要确保其他地方不能使用该模式(从不是前一个数字之后的空格)因为它是一个