You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中替换任意长度的重复字符序列?

将连续重复的分隔符替换为单个字符

需要处理带已知分隔符的字符串,把出现一次或多次的相同字符序列(这里是*)替换成单个指定字符(比如_),无需假设重复序列的最大长度。

原有方案的问题

之前的做法是多次调用sed,逐个替换不同长度的*组合,必须提前预估最大重复长度,扩展性极差:

cat example_file.txt | sed 's/\*\*\*\*\*\*\*\*/_/g' | sed 's/\*\*\*\*\*\*\*/_/g' | sed 's/\*\*\*\*\*\*/_/g' | sed 's/\*\*\*\*/_/g' | sed 's/\*\*/_/g' | sed 's/\*/_/g' > clean_file.txt

解决方案:用正则匹配任意长度的重复序列

直接利用正则表达式匹配一个或多个连续的*,一次完成全局替换,无需考虑重复长度。

方法1:兼容所有sed版本的基础正则语法

sed 's/\*\+/_/g' example_file.txt > clean_file.txt
  • \*:转义后的星号,匹配单个*字符
  • \+:匹配前面的字符(即*)一次或多次(基础正则中需转义+)
  • g:全局替换一行内所有匹配的部分

方法2:启用扩展正则(适用于GNU sed等支持-E选项的版本)

sed -E 's/\*+/\_/g' example_file.txt > clean_file.txt
  • -E:启用扩展正则语法,此时+无需转义,直接表示“匹配前面字符一次或多次”

输入输出示例

输入文件example_file.txt内容:

>SH1111056.09FU|KC881085_refs|k__Fungi;p__Ascomycota;c__Sordariomycetes;o__Hypocreales;f__Clavicipitaceae;g__Neotyphodium;s__Neotyphodium_siegelii;|foliar_endophyte*litter_saprotroph*class1_clavicipitaceous_endophyte**leaf/fruit/seed**non-aquatic*arthropod-associated*filamentous_mycelium******
>SH1115797.09FU|UDB031565_refs|k__Fungi;p__Basidiomycota;c__Agaricomycetes;o__Hymenochaetales;f__Hymenochaetaceae;g__Fomitiporia;s__Fomitiporia_hippophaeicola;|plant_pathogen*wood_saprotroph**wood_pathogen*wood*white_rot*non-aquatic**filamentous_mycelium*polyporoid*poroid****
>SH0879139.09FU|KF945456|k__Viridiplantae;p__Anthophyta;c__Eudicotyledonae;o__Lamiales;f__Acanthaceae;g__Ruellia;s__Ruellia_brandbergensis;|ND**************
>SH0991532.09FU|UDB07658019|k__Fungi;p__Ascomycota;c__Dothideomycetes;o__Venturiales;f__Venturiaceae;g__Sympodiella;s__Sympodiella_sp;|litter_saprotroph****leaf/fruit/seed**non-aquatic**filamentous_mycelium******
>SH0991546.09FU|UDB07657573|k__Fungi;p__Ascomycota;c__Dothideomycetes;o__Venturiales;f__Venturiaceae;g__Sympodiella;s__Sympodiella_sp;|litter_saprotroph****leaf/fruit/seed**non-aquatic**filamentous_mycelium******

处理后输出:

>SH1111056.09FU|KC881085_refs|k__Fungi;p__Ascomycota;c__Sordariomycetes;o__Hypocreales;f__Clavicipitaceae;g__Neotyphodium;s__Neotyphodium_siegelii;|foliar_endophyte_litter_saprotroph_class1_clavicipitaceous_endophyte_leaf/fruit/seed_non-aquatic_arthropod-associated_filamentous_mycelium_
>SH1115797.09FU|UDB031565_refs|k__Fungi;p__Basidiomycota;c__Agaricomycetes;o__Hymenochaetales;f__Hymenochaetaceae;g__Fomitiporia;s__Fomitiporia_hippophaeicola;|plant_pathogen_wood_saprotroph_wood_pathogen_wood_white_rot_non-aquatic_filamentous_mycelium_polyporoid_poroid_
>SH0879139.09FU|KF945456|k__Viridiplantae;p__Anthophyta;c__Eudicotyledonae;o__Lamiales;f__Acanthaceae;g__Ruellia;s__Ruellia_brandbergensis;|ND_
>SH0991532.09FU|UDB07658019|k__Fungi;p__Ascomycota;c__Dothideomycetes;o__Venturiales;f__Venturiaceae;g__Sympodiella;s__Sympodiella_sp;|litter_saprotroph_leaf/fruit/seed_non-aquatic_filamentous_mycelium_
>SH0991546.09FU|UDB07657573|k__Fungi;p__Ascomycota;c__Dothideomycetes;o__Venturiales;f__Venturiaceae;g__Sympodiella;s__Sympodiella_sp;|litter_saprotroph_leaf/fruit/seed_non-aquatic_filamentous_mycelium_

内容的提问来源于stack exchange,提问作者another_rando

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:10:01