[Linux] 使用bash+sed命令进行文本的修改(不涉及正则表达式)

sed命令主要涉及到两个后缀: -i 与 -e.

sed -i 适用于在原始文本上编辑, i 意为in-place, 它允许你在不创建备份文件的情况下, 修改原始文件中的文本. 例如:

sed -i 's/old_pattern/new_pattern/g' filename

这行命令将filename文件中所有old_pattern字符串替换为new_pattern字符串.

其中s代表替换操作 substitue, 表示进行替换操作; g代表 global, 代表对每一行中的每一个old_pattern都进行替换. 如果没有g, 则只替换每一行中的第一个old_pattern.

/ 符号为分隔符, 分隔符也可以用 # , 以避免与字符串中的 / 发生混淆:

sed -i 's#old_pattern#new_pattern#g' filename

sed -e 用于指定多个编辑命令, 可以进行多个pattern的搜索与替换. 例如:

sed -e 's/old_pattern/new_pattern/g' -e 's/another_pattern/yet_another_pattern/g' filename > new_filename

这行命令将filename文件中所有old_pattern替换为new_pattern, 将所有another_pattern替换为yet_another_pattern.

同时, 将修改后的filename保存为new_filename并保存在当前相同的路径中, 这将不影响原来的filename.

如果希望直接在原始文本中指定多个编辑命令, 可以同时使用 -i 与 -e. 例如:

sed -i -e 's/old_pattern/new_pattern/g' -e 's/another_pattern/yet_another_pattern/g' filename

如果在其他路径直接调用包含sed命令的脚本, 例如在terminal直接执行, 或者在python脚本中使用subprocess调用时, 需要注意路径问题. filename尽量使用绝对路径. 如果filename为相对路径, 那么它相对的不会在bash脚本所在路径, 而是调用它的(python / terminal)脚本所在路径. 

为了有效地利用Sed工具在Linux环境下对文本文件执行复杂的正则表达式匹配并批量替换,我强烈建议参考《精通Linux Sed与Awk:101实用技巧》这本书。该书仅提供了关于Sed和Awk的基础知识,还深入探讨了它们的高级用法,对于希望提高文本处理能力的系统管理员和开发人员来说,是一本可多得的实用指南。 参考资源链接:[精通Linux Sed与Awk:101实用技巧](https://wenku.csdn.net/doc/6412b5eabe7fbd1778d44d8a?spm=1055.2569.3001.10343)Linux系统中,Sed命令行工具结合复杂的正则表达式可以高效且准确地进行文本批量替换。首先,理解正则表达式是关键,它允许你定义匹配文本的模式,而Sed使用这些模式来识别和处理行。Sed的基本替换命令格式是:`sed 's/正则表达式/替换字符串/标志' 文件名`。这里的`正则表达式`定义了要匹配的文本模式,`替换字符串`定义了要替换成的新文本,而`标志`则指示如何应用替换。 例如,如果你想替换文件中的所有出现的单词`oldword`为`newword`,你可以使用以下命令: ```bash sed 's/oldword/newword/g' filename ``` 这里的`g`标志表示全局替换。如果你只想替换文件中的特定行,比如只替换从第5行到第10行的内容,你可以使用如下命令: ```bash sed '5,10s/oldword/newword/g' filename ``` 对于更复杂的模式匹配,Sed支持使用各种正则表达式特殊字符和表达式。例如,使用分组和反向引用,你可以在替换字符串中重新使用匹配的文本: ```bash sed 's/(old)word/\1newword/g' filename ``` 这里,`(old)`是分组,`\1`是对应第一个括号分组的反向引用。这样,`old`部分将被保留,并在其后添加`newword`。 如果你需要处理的文本替换规则非常复杂,建议详细阅读《精通Linux Sed与Awk:101实用技巧》中的“正则表达式Sed中的应用”和“深入探索”章节,以获得更深入的理解和高级技巧。 通过学习和实践这本书中的例子,你将能够熟练掌握Sed工具,处理从简单到复杂的各种文本处理任务,显著提高Linux环境下的生产力。 参考资源链接:[精通Linux Sed与Awk:101实用技巧](https://wenku.csdn.net/doc/6412b5eabe7fbd1778d44d8a?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值