【sed学习】sed -i和sed -i -e有什么区别

2024-01-06 09:35:15 浏览数 (3)

前言: 项目脚本有句sed -i 'aPRODUCT_PACKAGES = rtk_mdnsd' device.mk sed -i -e 'a/vendor/bin/ipv4lld u:object_r:ipv4lld_exec:s0' sepolicy/file_contexts不太清楚sed -i和sed -i -e有什么区别,学习一下

sed -ised -i -e 是用于编辑文件中匹配模式的命令。它们的区别在于 -e 选项。

  • sed -i:直接编辑文件,并将结果写回原始文件中。不需要指定脚本文件。
  • sed -i -e:与 -i 类似,但是需要使用 -e 选项后跟一个或多个编辑指令,这些指令可以是正则表达式、替换操作等,以对文件进行更复杂的编辑。

例如,以下命令使用 sed -i 将文件中所有的 “old” 替换为 “new”:

代码语言:javascript复制
sed -i 's/old/new/g' file.txt

而以下命令使用 sed -i -e 在替换之前先打印行号,并将 “old” 替换为 “new”:

代码语言:javascript复制
sed -i -e '/old/=' -e 's/old/new/g' file.txt

请注意,在使用 -i 选项时,请务必小心操作,因为它会直接修改原始文件。建议在进行修改之前备份文件。


当使用 sed -i 命令时,可以直接编辑文件并将结果写回原始文件中。以下是几个示例:

将文件中的所有 “apple” 替换为 “orange”:

代码语言:javascript复制
sed -i 's/apple/orange/g' file.txt

删除文件中包含特定字符串的行:

代码语言:javascript复制
sed -i '/pattern/d' file.txt

而在使用 sed -i -e 命令时,可以在编辑之前先执行一些额外的操作,例如打印行号或添加其他替换规则。以下是几个示例:

在替换之前先打印包含 “apple” 的行号:

代码语言:javascript复制
sed -i -e '/apple/=' -e 's/apple/orange/g' file.txt

替换文件中的多个模式:

代码语言:javascript复制
sed -i -e 's/apple/orange/g' -e 's/banana/mango/g' file.txt

添加一个新行到以 “Hello” 开头的行之后:

代码语言:javascript复制
sed -i -e '/^Hello/aNew line' file.txt

以上示例展示了 sed -ised -i -e 之间的一些区别,后者可用于更复杂的编辑任务。请根据具体需求选择适合的命令和选项。


学习使用 sed 命令可以帮助你在文本处理中实现强大的编辑和转换功能。以下是一些学习 sed 的步骤和资源推荐:

  1. 学习基本语法:sed 命令可以通过一系列的编辑指令来操作文本。了解基本的 sed 语法,包括模式匹配、替换、删除等操作是很重要的。你可以查阅 sed 的官方文档或在线教程来学习详细的语法规则。
  2. 实践例子:通过实际的例子来练习 sed 的用法,例如替换文件中的字符串、删除特定行、添加新行等。逐步尝试各种不同的 sed 命令并观察结果。
  3. 正则表达式:了解正则表达式对于掌握 sed 是至关重要的,因为 sed 使用正则表达式进行模式匹配。学习常见的正则表达式语法以及元字符的含义,可以帮助你更好地理解和应用 sed 命令。
  4. 阅读文档和教程:sed 的官方文档提供了详细的命令说明和示例。此外,还有许多在线教程和博客文章可供参考。阅读这些资源可以帮助你更深入地理解 sed 的功能和用法。

以下是一些学习 sed 的资源推荐:

  • GNU sed 官方文档:https://www.gnu.org/software/sed/manual/sed.html
  • Sed - An Introduction and Tutorial by Bruce Barnett: http://www.grymoire.com/Unix/Sed.html
  • The sed FAQ: https://www.catonmat.net/blog/sed-one-liners-explained-part-one/
  • sed Cheat Sheet: https://www.cheatography.com/davechild/cheat-sheets/sed/

通过不断练习和实践,你将逐渐掌握 sed 命令的使用技巧,并能够灵活应用它来处理文本数据。

0 人点赞