Linux sed命令

Linux sed命令

sed 命令可依照脚本的指令来处理、编辑文本文件。
主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

参考

语法

sed [-hnV][-e<script>][-f<script文件>][文本文件]

参数说明

  • -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
  • -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
  • -h或--help 显示帮助。
  • -n或--quiet或--silent 仅显示script处理后的结果。
  • -V或--version 显示版本信息。

动作说明

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
  • d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
  • s :取代,可以直接进行取代的工作,通常这个 s 的动作可以搭配正则表达式例如 1,20s/old/new/g

示例

简单用法

sed -e 4a\123456 file.txt # 在 file 文件的第四行后添加一行,并将结果输出到标准输出
sed -e '2,5d' file.txt #将第 2~5 行删除,sed 的动作为 '2,5d',d 为删除的意思
sed -e '3,$d' file.txt #'3,$d'为删除 3行~最后一行
sed '2,5d' file.txt
sed '3,$d' file.txt
sed -e '2a drink tea' file.txt #在第二行后(即加在第三行) 加上drink tea
sed -e '2i drink tea' file.txt #第二行前加上drink tea
sed -e '2a Drink tea or ......\
drink beer ?' file.txt #在第二行后面加入两行字,例如 Drink tea or ..... 与 drink beer?
# 每一行之间都必须要以反斜杠 \ 来进行新行标记。上面的例子中,我们可以发现在第一行的最后面就有 \ 存在。
sed -e '2,5c No 2-5 number' file.txt #将第 2-5 行的内容取代成为 'No 2-5 number'
sed -i '/123/c abc' file.txt # '123'所在行替换成 'abc'
sed -n '5,7p' file.txt #仅列出 file.txt 文件内的第 5-7 行
sed -n '/123/p' file.txt #搜索 file.txt 有 '123' 关键字的行
sed -n 's/test/trial/p' data5.txt #只输出被替换的行
sed '/123/d' file.txt #删除 file.txt 所有包含 '123' 的行,其他行输出
sed 's/123/abc/' file.txt # 将 testfile 文件中每行第一次出现的 '123' 用字符串 'abc' 替换
# 修改后内容会到标准输出,不会修改原文件
sed -e 's/oo/kk/g' file.txt # g 标识符表示全局查找替换,使 sed 对文件中所有符合的字符串都被替换
sed -i 's/oo/kk/g' file.txt # 选项 i 使 sed 修改文件
sed -i 's/oo/kk/g' ./file* # 批量操作当前目录下以 file 开头的文件
sed -i '$a This is a test' file.txt #直接在 file.txt 最后一行加入 'This is a test'
sed -e '4 a newline' testfile # 4 行之后添加一行
sed -e '4 a newline\nnewline2' testfile # 4 行之后追加 2 行
sed -e '4 a newline\nnewline2\n' testfile # 4 行之后追加 3 行(2 行文字和 1 行空行
sed '4 a \\' # 可以添加一个完全为空的空行
sed '4 a \\n' # 可以添加两个完全为空的空行

自动化

对sed查找结果进行判断,并执行对应操作

results=$(sed -n '/apple/p' ./file.txt)
if [ -n "$results" ]; then
sed -i 's/apple/banana/g' ./file.txt
else
echo 'no apple!'
fi
posted @   Trigger-CN  阅读(78)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示