使用sed批量修改跨多行的配置文件

背景

我们经常需要对一些配置文件进行修改,这些配置文件的内容依不同项目而变,但大体结构不变,所以可以批量修改。

例如下图这个C结构体的字段,需要将其值从256改成512,该字段是个数组,占了2行,且出现在多个.h文件,手工修改工作量非常大,必须用脚本来做。

修改结构体内数组字段的每个元素

我通常使用findsed命令来做,不过网上对sed的介绍都比较浅,很少讲解如何匹配一个完整段落(即起始行终止行均为模式串)的情况,其实这种需求sed是完全可以满足的。

思路

首先通过find命令过滤出所有的.h格式的配置文件,然后通过sed命令的-i选项就地执行修改操作。

如果我们只提供了一个模式串,则sed只匹配一行,能修改的也就只有一行,这不符合我们的需求,因此sed的行匹配语句必须精心构造。

我们必须匹配多行,但是匹配多行也有很多选择,我选择下一个字段来提供边界,这样的好处是不管目标字段是多少维数组,都能精确匹配

最终脚本

find sensor/ -name '*.h' | xargs sed -i '/nWienerFactor/,/nNlmFactor/{s/256/512/g}'

这个脚本一次性修改了24个.h文件中的48个字段,非常高效!

总结

使用sed的精髓就在模式串的选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: sed是一种流编辑器,可以用于批量替换文件内容。它可以读取文件中的文本,并对其进修改,然后将修改后的文本输出到标准输出或者写回原文件使用sed批量替换文件内容的方法是,先使用sed命令读取文件中的文本,然后使用替换命令将需要替换的文本替换为新的文本。最后,将修改后的文本输出到标准输出或者写回原文件。 ### 回答2: sed是一种文本编辑器,可以帮助用户批量替换文件中的内容。它支持正则表达式,可以用来匹配和替换文本。在命令使用sed可以快速,高效地完成批量替换文件内容的任务,下面我们就来详细介绍一下。 sed命令格式: sed [选项参数] '[sed命令]' [文件] 选项参数: -i 表示直接在文件上进修改,如果不加-i选项,sed只是对文本进替换操作,不对原文件修改。 -e 执多个命令,用分号隔开。 sed命令: 1. s//:替换命令 最常用的sed命令是s命令,用于替换文本。 例如:s/old/new/可以将文件中的old替换为new。 2. 替换指定: 例:sed –i '3s/old/new/g' file.txt 将文本文件file.txt中的第三匹配的内容的"old"替换为"new",g代表全文替换。 3. 替换指定的指定字符串: 例:sed -i '/word/s/old/new/g' filename 将filename文件中,包含word的中的old替换为new,g代表全文替换。 4. 替换指定范围内的指定字符串: 例:sed -i '2,5s/old/new/g' file.txt 将文本文件file.txt中的第2和第5之前(不包括第5)匹配的内容的"old"替换为"new",g代表全文替换。 总之,sed命令是一种高效、灵活、强大的批量替换文件内容的工具,可以极大地提高用户的工作效率。需要注意的是,在使用sed命令进批量替换的时候,一定要谨慎操作,确保修改的内容是正确的,避免不必要的损失。 ### 回答3: sed是一种强大的文本处理工具,它可以用来编辑文件中的文本,批量替换文件内容是 sed 最常见的用途之一。 sed命令的用法非常简单,它的基本语法如下: ``` sed [-nefri] 'command' 文件名 ``` 其中,-n 选项表示只打印出经过处理的文本,而不是全部打印出来;-e 选项表示指定要执sed 命令;-f 选项表示指定一个包含 sed 命令的文件,可以在文件中存储多个命令;-r 选项表示使用扩展的正则表达式;-i 选项表示在原文件中直接修改,而不是在终端输出。 sed命令中的 command 包含一个或多个 sed 的操作命令,比如 s 命令表示替换字符串,d 命令表示删除指定的文本等。 下面我们以一个具体的例子来演示如何使用 sed 批量替换文件内容: 假设我们有多个文件包含 "hello,world" 字符串,现在需要将字符串中的逗号替换为句号,可以使用如下命令: ``` sed -i 's/,/./' 文件名 ``` 其中,-i 选项表示直接在文件修改,s/old/new/ 表示将 old 替换为 new,/ 表示分隔符,可以使用任何字符作为分隔符。 如果需要替换多个文件中的内容,可以使用通配符 * 批量处理: ``` sed -i 's/,/./' *.txt ``` 以上命令将批量替换所有的 .txt 文件中的 "hello,world" 字符串。 当然,sed 命令不仅仅能够进文本替换,还可以用于删除指定文本、插入新文本、正则表达式匹配等操作,可以根据不同的需求选择合适的命令进操作。 总之,sed 是一种非常实用的文本处理工具,掌握 sed 命令的用法可以让我们更加高效地处理文件中的文本内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值