我有一些文件需要清理一些名称。
例如:
GCA_940670685.1_Clostridium_sp_chr 3757330
GCA_940677205.1_Clostridium_colinum_chr 2035557
GCA_942548115.1_Aeromicrobium_sp_chr 3463989
GCA_943169635.1_Fenollaria_sp_chr 3260126
GCA_943169825.1_Varibaculum_sp_chr 4423380
GCA_943736995.1_Sporosarcina_sp_chr 3771420
我需要一些这样的:
GCA_940670685.1 3757330
GCA_940677205.1 2035557
GCA_942548115.1 3463989
GCA_943169635.1 3260126
GCA_943169825.1 4423380
GCA_943736995.1 3771420
我尝试使用:
sed 's/_[A-Za-z]+_//gI' Terrabacteria_chr_lengths.tsv
sed 's/\w+_\w+_chr//gI' Terrabacteria_chr_lengths.tsv
find Results/Lengths/Bacteria -type f -exec sed -i 's/_\w+_\w+_chr//g' {} \;
但似乎没有任何效果,我认为由于我在正则表达式方面的技能不佳,例如。\w+ \w+_chr。
任何建议将不胜感激。谢谢你。
保罗
最大的问题是
+
它不能作为 sed 基本正则表达式 (BRE) 中的量词 - 您需要使用-E
或-r
使用它切换到扩展正则表达式 (ERE) 模式(或更改+
为\{1,\}
POSIX BRE 版本1)。除此之外,您似乎希望在初始下划线之后匹配一系列字母字符和下划线(但不以下划线结尾)。所以要么:
或者
您不需要
g
修饰符,因为您每行进行一次替换。1 GNU sed 实际上支持
\+
作为 BRE 中的量词,但恕我直言,这只会增加混乱。