如何用Bash命令替换文件中以slo开头的字符串为fwd?
问题描述
我的脚本文件内存在许多以slo开头的字符串,需要将所有这类字符串替换为fwd,当前目录下共有5个需要处理的文件。以下是脚本片段示例:
template_version: 2018-03-02 resources: instance01: type: ../../../templates/nf.yaml properties: vm_name: 'slol2lvdl1' vm_flavour: 'dns_19te' image_name: 'pdns_dnsd_slo_211214121207' vm_az: 'az-1' vm_disk_root_size: '50' vm_disk_data_size: '50' network_mgmt_refs: 'int:dns_ox_slo_507:c3dns_slo_live_nc_vnns_pcg'
解决方案
可以使用sed命令批量完成文本替换,根据文件的不同情况选择对应的命令:
1. 指定具体文件名替换
如果明确知道5个目标文件的名称,直接列出文件名执行:
sed -i 's/\bslo\b/fwd/g' file1.yaml file2.yaml file3.yaml file4.yaml file5.yaml
2. 按文件后缀批量替换
如果5个文件都是同一类型(比如.yaml后缀),用通配符匹配:
sed -i 's/\bslo\b/fwd/g' *.yaml
3. 替换所有slo子串(无单词边界限制)
如果不需要限制slo必须是单词开头,而是替换所有出现的slo,去掉\b即可:
sed -i 's/slo/fwd/g' [目标文件列表或通配符]
命令参数说明
-i:直接修改原文件(原地替换,不生成临时文件)s/原字符串/新字符串/g:替换规则,s表示替换操作,g表示全局替换(一行内所有匹配项都替换,而非只替换第一个)\b:单词边界标记,确保只匹配独立的slo开头的单词,避免误替换包含slo的其他字符串
内容的提问来源于stack exchange,提问作者Siddharth
相关产品推荐
相关产品推荐

