Linux搜索和替换示例

最近,我不得不更改一些嵌套子目录中一堆配置文件中显示的文本。 我没有时间利用已有10年历史的perl技能,我在寻找一些可以使用的shell命令。 令人惊讶的是,网络上有很多例子都行不通,所以我得到了这些变体:

随意先进行测试,然后研究它们的工作原理。 在这两种情况下,我们都使用xargs生成sed命令向linux“ sed”命令提供了所需文件的列表(有关xargs的有趣摘要,请参见本文 )。

1.搜索并替换所有文件

如果您需要替换一组文件中的一组特定文本,但又不知道哪些文件可能包含您要查找的文本,这可能会很有用:

grep -lr -e 'old text' * | xargs sed -i 's/old text/new text/g'

在这里使用grep,我们以递归方式(“ -r”选项)查找包含文本“ old text”的文件。 您可以在这里真正地使用regex发挥创意,这可以通过“ -e”选项实现。

Grep提供了执行实际搜索和替换的文件列表(“ -l”选项)(您可以单独运行该部分以查看其输出); 然后,将此文件列表通过管道传递给set命令,然后该命令执行搜索和用新文本替换旧文本的实际工作。

sed的“ -i”选项将导致就地编辑,这意味着原始文件已被修改(在我的情况下,这是必要的,但是如果您提供-i,则可以告知sed进行备份)。 “ s /…”中的“ s”表示“替代”,“ g”表示“全局替换” –正是这样。

2.搜索并替换指定的文件

如果您碰巧知道需要更新的文件名,则可以使用以下变体:

find -name myconfig_file.txt | xargs sed -i 's/old text/new text/g'

这基本上是相同的想法,但是使用find操作来提供与给定名称匹配的文件列表。 从当前开始,这贯穿所有子目录。 然后,以与上述相同的方式将文件列表通过管道传输到sed。

PS Above命令在Ubuntu和RedHat上进行了测试

参考文献

  1. grep命令参考
  2. xargs命令参考
  3. sed命令参考
  4. sed命令在Mac OS X上出现“未定义标签”错误

翻译自: https://mkyong.com/linux/linux-search-and-replace-example/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值