Linux sed(基础用法)

一、特点及格式

sed stream editor 流编辑器,sed把处理的内容(文件),当做水流他,源源不断的进行处理,直到文件末尾。
sed格式:

命令选项(s)sed命令功能(g)修饰符参数(文件)
sed-r ‘s#oldboy#oldgire#g’oldboy.txt

sed命令核心功能 增删改查:

功能
s替换subsitute sub
p显示print
d删除delete
cai增加c/a/i

二、sed命令执行过程

四个字描述:找谁干啥
找谁:你要哪一行
干啥:增删改查

三、sed核心应用

1)sed 查找p

查找格式:
‘1p’ ‘3p’指定行号查找
‘1,5p’指定行号范围查找
‘/lidao/p’类似grep过滤,//里面可以写正则
‘/10:00/,/11:00/p’表示范围过滤
-n取消默认输出,默认输出文件全部内容
$p表示最后一行
	 --> sed -n '3p' 1.txt   
	103,lidao,CFO
	--> sed -n '1,3p' 1.txt
	101,oldboy,CEO
	102,zhangyao,CTO
	103,lidao,CFO
	$p 表示最后一行
	--> sed -n '3,$p' 1.txt  
	103,lidao,CFO
	104,yy,cfo
	110,yuyan,COCO
	--> sed -n '/oldboy/p' 1.txt
	101,oldboy,CEO
	--> sed -n '/10/p' 1.txt
	101,oldboy,CEO
	102,zhangyao,CTO
	103,lidao,CFO
	104,yy,cfo
	110,yuyan,COCO
	--> sed -n '/[45]/p' 1.txt
	104,yy,cf
	扩展正则要加-r
	--> sed -nr '/[0-9]+/p' 1.txt
	101,oldboy,CEO
	102,zhangyao,CTO
	103,lidao,CFO
	104,yy,cfo
	110,yuyan,COCO
	--> sed -nr '/[0-9]{3}/p' 1.txt
	101,oldboy,CEO
	102,zhangyao,CTO
	103,lidao,CFO
	104,yy,cfo
	110,yuyan,COCO

注:sed命令,表示范围过滤的时候,如果结尾的内容匹配不到就是一直显示到最后一行。

2)sed 删除d

查找格式:
‘1d’ ‘3d’指定行号删除
‘1,5d’指定行号范围删除
‘/lidao/d’类似grep过滤,//里面可以写正则
‘/10:00/,/11:00/d’表示范围删除
	删除文件中的空行和包含#的行
	egrep -v '^$|#' 1.txt
	sed -r '/^$|#/d' 1.txt

3)sed 增加 cai

命令含义
creplace 替代这行的内容
aappend 向指定的行或者每一行追加内容(会显示在下一行)
iinsert插入,向指定的行或者每一行插入内容(行前面)(会显示在上一行)
	-->sed '3a 996,lidao,996' 1.txt
	101,oldboy,CEO
	102,zhangyao,CTO
	103,lidao,CFO
	996,lidao,996
	104,yy,cfo
	110,yuyan,COCO
	-->sed '3i 996,lidao,996' 1.txt
	101,oldboy,CEO
	102,zhangyao,CTO
	996,lidao,996
	103,lidao,CFO
	104,yy,cfo
	110,yuyan,COCO
	-->sed '3c 996,lidao,996' 1.txt
	101,oldboy,CEO
	102,zhangyao,CTO
	996,lidao,996
	104,yy,cfo
	110,yuyan,COCO

4) sed 替换s

格式 s///g;s###g
g – global 全局替换,不加g只替换每行第一个

--> sed 's/[0-9]//g' 1.txt
,oldboy,CEO
,zhangyao,CTO
,lidao,CFO
,yy,cfo
,yuyan,COCO
--> sed 's/[0-9]//' 1.txt
01,oldboy,CEO
02,zhangyao,CTO
03,lidao,CFO
04,yy,cfo
10,yuyan,COCO

后向应用,先保护起来再使用。

--> echo 12345 | sed -r 's/12345/<12345>/g'
<12345
--> echo 12345 | sed -r 's/(.*)/<\1>/g'
<12345>	
--> echo oldboy_lidao | sed -r 's/(^.*)_(.*$)/\2_\1/g'
lidao_oldboy
--> echo oldboy_lidao | sed -r 's/(^[a-z]+)_([a-z]+$)/\2_\1/g'
lidao_oldboy
##特殊字符符号 \w == [0-9a-zA-Z]
--> echo oldboy_lidao | sed -r 's/(^\w+)_(\w+$)/\2_\1/g'
lidao_oldbo
--> ip a s lo | sed -n '3p'
inet 127.0.0.1/8 scope host lo
--> ip a s lo | sed -n '3p' | sed -r 's/(.*t )(.*)(\/.*$)/\1/g'
inet
.*是贪婪匹配,想要取ip就需要再t 这里停住,所以第一个中结束是t(空格)
--> ip a s lo | sed -n '3p' | sed -r 's/(.*t )(.*)(\/.*$)/\2/g'
127.0.0.1
精简:
--> ip a s lo | sed -nr '3s/(.*t )(.*)(\/.*$)/\2/gp'
127.0.0.1

读取文件权限
--> stat 1.txt
File: 1.txt
Size: 109       	Blocks: 96         IO Block: 524288 regular file
Device: 2000/2097	Inode: 1474  Links: 1
Access: (0664/-rw-rw-r--)  Uid: (1886/yuha)   Gid: (2032/   nba)
Access: 2023-11-20 03:05:36.876870000 -0500
Modify: 2023-11-20 03:05:36.876870000 -0500
Change: 2023-11-20 03:05:36.876870000 -0500
Birth: -
--> stat 1.txt | sed -n '4p'
Access: (0664/-rw-rw-r--)  Uid: (1886/yuha)   Gid: (2032/   nba
--> stat 1.txt | sed -n '4p' | sed -r 's/.*\(0(.*)\/-.*/\1/g'
664
--> stat 1.txt | sed -nr '4s/.*\(0(.*)\/-.*/\1/gp'
664
--> stat -c%a 1.txt
664

注:先查看命令帮助,是否可以通过命令直接获取自己想要的格式,如果没有再通过sed处理。

四、总结

四个字描述:找谁干啥
找谁:你要哪一行
干啥:增删改查

<think>嗯,用户想了解Linuxsed命令的详细用法和实例。首先,我需要回忆一下sed的基本功能和常见用途。sed是流编辑器,主要用于文本处理,比如替换、删除、插入等操作。用户可能已经知道一些基础,但需要更深入的指导,包括语法和例子。 接下来,我得组织回答的结构。通常,用户喜欢分步骤或分部分的内容,这样容易理解。可能分为简介、语法、常用命令、实例、高级技巧和常见问题这几个部分。不过用户提供的示例里引用了替换、删除、插入、行寻址等,可能这些是重点。 要注意用户提到的系统级指令,比如行内数学公式用$...$,但这里可能用不上。不过要确保中文回答,正确使用LaTeX格式,如果有数学表达式的话。但sed命令主要涉及文本处理,可能不需要数学公式,但如果有例子中的正则表达式,可能需要用代码块来展示。 用户还要求生成相关问题,我需要考虑用户可能进一步想知道的内容,比如sed和awk的区别,正则表达式的高级用法,或者如何调试sed脚本。这些可以作为相关问题放在最后。 现在检查用户提供的引用内容。引用[1]提到sed是强大的文本处理工具,结合正则表达式和多个命令。引用[2]提到高级用法,如分支命令和流程控制。所以,在回答中需要包括基础命令和高级用法,比如分支、循环,以及如何组合多个命令。 用户可能的需求包括实际例子,比如替换文件中的文本、删除特定行、插入内容等。需要给出具体的命令示例,并解释每个参数的作用。例如,替换命令s的用法,如何指定行范围,使用不同的分隔符等。 另外,用户可能对sed的工作流程不太清楚,比如读取行到模式空间,处理后再输出。需要简要说明sed的处理过程,这样用户能更好地理解命令的效果,尤其是在处理多行或保持空间时。 还要注意常见问题,比如原地编辑文件需要-i选项,处理特殊字符时的转义,以及如何同时执行多个命令。这些是用户在实际使用中可能会遇到的坑,需要提前说明。 在高级技巧部分,可以介绍正则表达式的分组、反向引用,以及使用标签控制流程。例如,如何跳过某些处理步骤,或者根据条件执行不同的命令。这些内容在引用[2]中提到了分支命令b,所以需要详细解释。 最后,生成的相关问题需要围绕用户可能进一步探索的方向,比如sed与其他工具的比较、复杂文本处理案例、调试技巧等。确保问题能够引导用户深入学习。 总结一下,回答的结构应该是:简介、语法结构、常用命令、实例演示、高级技巧、常见问题、相关问题。每个部分用简洁的语言和示例说明,确保用户能一步步掌握sed用法。同时,注意引用中的内容,适当融入高级用法的讲解,比如分支命令和流程控制,以增强回答的深度。</think>### Linux sed命令详解及实例教程 --- #### 一、sed命令简介 sed(Stream Editor)是Linux中基于文本流的非交互式编辑器,通过逐行处理输入流实现文本替换、删除、插入等操作,支持正则表达式[^1]。 --- #### 二、基本语法 ```bash sed [选项] '命令' 输入文件 ``` **常用选项**: - `-i`:直接修改文件内容(慎用) - `-n`:仅显示处理后的行 - `-e`:执行多条命令(如 `sed -e 's/a/A/' -e 's/b/B/'`) - `-r`:启用扩展正则表达式 --- #### 三、核心操作命令 1. **替换命令 `s`** ```bash sed 's/原内容/新内容/[修饰符]' file.txt ``` - **修饰符**: - `g`:全局替换(默认仅替换每行首个匹配) - `p`:打印替换后的行 - `i`:忽略大小写 - **实例**: ```bash # 将文件中的"apple"替换为"orange"(仅首个匹配) sed 's/apple/orange/' file.txt # 全局替换并保存文件 sed -i 's/apple/orange/g' file.txt ``` 2. **删除命令 `d`** ```bash # 删除第3行 sed '3d' file.txt # 删除包含"error"的行 sed '/error/d' file.txt ``` 3. **插入/追加命令 `i` 和 `a`** ```bash # 在第2行前插入内容 sed '2i\Insert this line' file.txt # 在匹配行后追加内容 sed '/pattern/a\Append this line' file.txt ``` 4. **行寻址** - **范围操作**:`起始行,结束行` ```bash # 删除1到5行 sed '1,5d' file.txt # 对包含"start"到"end"的行执行替换 sed '/start/,/end/s/old/new/g' file.txt ``` --- #### 四、高级用法 1. **正则表达式分组** ```bash # 交换第1列和第2列(使用分组和反向引用) sed 's/\([^ ]*\) \([^ ]*\)/\2 \1/' file.txt ``` 2. **多命令组合** ```bash # 删除空行并替换内容 sed -e '/^$/d' -e 's/foo/bar/g' file.txt ``` 3. **分支命令 `b`(流程控制)** ```bash # 若行包含"skip",跳过后续处理 sed '/skip/{b end;}; s/old/new/; :end' file.txt ``` --- #### 五、经典实例 1. **提取日志中的时间戳** ```bash sed -n 's/.*\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\).*/\1/p' log.txt ``` 2. **批量重命名文件** ```bash ls *.txt | sed 's/\(.*\)\.txt/mv & \1.md/' | sh ``` 3. **处理多行文本** ```bash # 合并连续空行为单行 sed ':a; N; /\n$/ba; s/\n\+/\n/;' file.txt ``` --- #### 六、常见问题 1. **原地修改文件需谨慎**:使用 `-i` 前建议先备份或测试命令。 2. **特殊字符转义**:若替换内容含 `/`,可改用其他分隔符(如 `s#old#new#`)。 3. **性能优化**:处理大文件时避免频繁写操作,优先使用流式处理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值