我正在尝试从文件中的某些字符串中删除所有“_(一个数字)”实例。因此tig00000003_1应该成为tig00000003我的测试文件如下所示:
##sequence-region tig00000001_732 1 630
tig00000003_1 Name=tig00000003_1;
我尝试过
sed -E 's/(tig[0-9]{8}\_[0-9]{1})/ \1(tig[0-9]{8}) /' my_test.txt
,结果如下:
##sequence-region tig00000001_7(tig[0-9]{8}) 32 1 630
tig00000003_1(tig[0-9]{8}) Name=tig00000003_1;
这就是我想要的:
##sequence-region tig00000001_732 1 630
tig00000003 Name=tig00000003;
我怎样才能删除捕获组中匹配的模式,或者只保留捕获组内的匹配?
答案1
您可以简单地将非注释行上的“_(一个数字)”替换为空,如下所示:
sed '/^[^#]/ s/\_[0-9]//g' your_file
其工作方式如下:
- 与注释不匹配的行被标识为以 (
^
) 任何非 # 符号 ([^#]
)开头的行 - 然后在这些行上,每当在该行中找到该模式时,用任何下划线 + 数字 ( ) 替换
_[0-9]
为空( )(//)
g
答案2
你很接近了。使用括号括住“tig”数字
sed -E '/^#/n; s/(tig[0-9]{8})\_[0-9]/\1/g' my_test.txt
# ...............^^^^^^^^^^^^^........^^