Bash中如何在含=和;的字符串分号前批量追加星号
问题说明
现有如下格式的字符串:
paramone=somerandomvalue; paramtwo=somerandomvalue; paramthree=somerandomvalue;
需要在每一个等号对应的取值末尾、分号之前追加*星号,处理后期望效果如下:
paramone=somerandomvalue*; paramtwo=somerandomvalue*; paramthree=somerandomvalue*;
处理规则:
- 仅对同时包含
=和;的键值对片段执行追加操作 - 仅带分号但没有等号的普通字符串片段不做任何修改
解决方法
直接用正则替换就能实现,通用匹配规则:
- 查找正则:
=([^;]*); - 替换内容:
=$1*;
规则逻辑
- 先匹配
=字符,锁定键值对的赋值位置,自动过滤掉没有等号的普通分号片段 - 捕获等号之后、下一个分号之前的所有内容,也就是需要追加星号的value部分
- 匹配片段末尾的分号
- 替换时保留原有的等号、value值、分号,只在value和分号之间插入
*,不会改动原有内容结构
不同场景的使用示例
Python代码实现
import re raw_text = "paramone=somerandomvalue; paramtwo=somerandomvalue; paramthree=somerandomvalue; plain_text_with_semicolon;" result = re.sub(r'=([^;]*);', r'=\1*;', raw_text) print(result)
运行输出:
paramone=somerandomvalue*; paramtwo=somerandomvalue*; paramthree=somerandomvalue*; plain_text_with_semicolon;
可以看到没有等号的plain_text_with_semicolon;片段未被修改,完全符合规则要求。
文本编辑器批量替换
如果是在VS Code、Notepad++、Sublime Text这类支持正则替换的编辑器里处理文本,直接打开替换面板,勾选「正则表达式」选项,查找内容填=([^;]*);,替换为填=$1*;,执行全部替换即可。
内容的提问来源于stack exchange,提问作者Aastha
相关产品推荐
相关产品推荐

