linux系统sed命令详解

linux系统sed命令详解

sed在处理文本时是逐行读取文件内容,读到匹配的行就根据指令操作,不匹配就跳过。

sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑。本文主要介绍sed的一些基本用法,并通过shell脚本演示sed的使用实例。

1. sed的使用方法,调用sed命令的语法有两种:
一.在命令行指定sed指令对文本进行处理:sed +选项 ‘指令’ 文件
二.先将sed指令保存到文件中,将该文件作为参数进行调用:sed +选项 -f 包含sed指令的文件 文件

sed的常用选项

-e:它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e指令。
-f:其后跟保存sed指令的文件。
-i:直接对内容进行修改,不加-i时默认只是预览,不会对文件进行实际修改。
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后直线式处理过的行。

sed中的编辑命令

命令说明
a追加,在匹配行的后面插入内容。
c更改,更改匹配行的内容
i插入,在匹配行的前插入内容。
d删除,删除匹配的内容。
s替换:替换掉匹配的内容。
p打印,打印出匹配的内容,通常与-n选项一起使用。
=打印被匹配行的行号。
n读取下一行,遇到n时会自动跳入下一行。
r,w读和写编辑命令,r用于将内容读入文件,w用于将匹配内容写入到文件。

实例:

  1. 向文件中添加或者插入行
sed '3ahello' test.txt #在第三行后面添加hello,3表示行号

sed '/123/ahello' test.txt #向内容123后面添加hello,如果文件中有多行包括123,则每一行后面都会添加
sed '$ahello' test.txt #在最后一行添加hello,$表示最后一行

sed '3ihello' test.txt #在第三行之前插入hello

sed '/123/ihello' test.txt #在包含123的行之前插入hello,如果有多行包含123,则包含123的每一行之前都会插入hello

sed '$ihello' test.txt #在最后一行之前插入hello

  1. 更改文件中指定行
sed '1chello' 1.txt #将文件1.txt的第一行替换为hello

sed '/123/chello' 1.txt #将包含123的行替换为hello

sed '$chello' 1.txt #将最后一行替换为hello
  1. 删除文件中的行
sed '4d' 2.txt #删除第四行

sed '1~2d' 2.txt  #从第一行开始删除,每隔2行就删掉一行,即删除奇数行

sed '1,2d' 2.txt #删除1~2行

sed '1,21d' 2.txt #删除1~2之外的所有行

sed '$d' 2.txt   #删除最后一行

sed '/123/d' 2.txt #删除匹配123的行

sed '/123/,$d' 2.txt #删除从匹配123的行到最后一行

sed '/123/,+1d' 2.txt #删除匹配123的行及其后面一行

sed '/^$/d' 2.txt #删除空行

sed '/123\|abc/!d' 2.txt #删除不匹配123或abc的行,/123\|abc/ 表示匹配123或abc ,!表示取反

sed '1,3{/123/d}' 2.txt #删除1~3行中,匹配内容123的行,1,3表示匹配1~3行,{/123/d}表示删除匹配123的行
  1. 替换文件中的内容
sed 's/123/hello/' 1.txt   #将文件中的123替换为hello,默认只替换每行第一个123

sed 's/123/hello/g' 1.txt #将文本中所有的123都替换为hello

sed 's/123/hello/2' 1.txt #将每行中第二个匹配的123替换为hello

sed 's/123/hello/gpw' 2.txt' 1.txt  #'将每行中所有匹配的123替换为hello,并将替换后的内容写入2.txt

sed  '/bb/s/,.*//g'  1.txt   #匹配有bb的行,替换匹配行中逗号后的所有内容为空  (,.*)表示逗号后的所又内容

sed  's/..$//g'  1.txt  #替换每行中的最后两个字符为空,每个点代表一个字符,$表示匹配末尾  (..$)表示匹配最后两个字符

sed  's/$/&'haha'/'  1.txt   # 在1.txt文件的每一行后面加上"haha"字段
  1. 打印文件中的行
sed -n '3p' 1.txt #打印文件中的第三行内容

sed -n '2~2p' 1.txt #从第二行开始,每隔两行打印一行,波浪号后面的2表示步长

sed -n '$p' 1.txt #打印文件的最后一行

sed -n '1,3p' 1.txt #打印1到3行

sed  -n '3,$p'  1.txt  #打印从第3行到最后一行的内容

sed -n '/you/p' 1.txt #逐行读取文件,打印匹配you的行

sed  -n '/bob/,3p'  1.txt  #逐行读取文件,打印从匹配bob的行到第3行的内容

sed -n '1,/too/p' 1.txt #打印第一行到匹配too的行

sed  -n  '3,/you/p'  1.txt   #只打印第三行到匹配you的行

sed  -n '/too/,$p'  1.txt  #打印从匹配too的行到最后一行的内容

sed  -n '/too/,+1p'  1.txt    #打印匹配too的行及其向后一行,如果有多行匹配too,则匹配的每一行都会向后多打印一行

sed  -n '/bob/,/too/p'  1.txt   #打印从匹配内容bob到匹配内容too的行

  1. 打印文件的行号
sed -n "$=" 1.txt   #打印1.txt文件最后一行的行号(即文件有多少行,和wc -l 功能类似)

sed  -n '/error/='  1.txt     #打印匹配error的行的行号

  1. 从文件中读取内容
sed 'r 2.txt' 1.txt  #将文件2.txt中的内容,读入1.txt中,会在1.txt中的每一行后都读入2.txt的内容

sed '3r 2.txt' 1.txt  #在1.txt的第3行之后插入文件2.txt的内容(可用于向文件中插入内容)

sed '/245/r 2.txt' 1.txt  #在匹配245的行之后插入文件2.txt的内容,如果1.txt中有多行匹配245则在每一行之后都会插入

sed '$r 2.txt' 1.txt     #在1.txt的最后一行插入2.txt的内容


  1. 向文件中写入内容
sed -n 'w 2.txt' 1.txt   #将1.txt文件的内容写入2.txt文件,如果2.txt文件不存在则创建,如果2.txt存在则覆盖之前的内容

sed -n '2w 2.txt' 1.txt   #将文件1.txt中的第2行内容写入到文件2.txt

sed -n -e '1w 2.txt' -e '$w 2.txt' 1.txt   #将1.txt的第1行和最后一行内容写入2.txt

sed -n -2 '1w 2.txt' -e '$w 3.txt' 1.txt  #将1.txt的第1行和最后一行分别写入2.txt和3.txt

sed -n '/123\|abc/w 2.txt' 1.txt #将1.txt中匹配abc或123的行的内容,写入到2.txt中

sed -n '/666/,$w 2.txt' 1.txt   #将1.txt中从匹配666的行到最后一行的内容,写入到2.txt中

sed -n '/xyz/,+2w 2.txt' 1.txt     #将1.txt中从匹配xyz的行及其后2行的内容,写入到2.txt中

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sed(stream editor)是一个流式文本编辑器,用于在输入流中按照指定规则进行文本的替换、删除、插入等操作。它通常与管道结合使用,对文本进行实时处理。 sed命令的基本语法是: ``` sed [选项] 'script' [输入文件] ``` 其中,选项用于指定sed的行为,script是一个由sed命令组成的脚本,用于指定要执行的操作,输入文件是待处理的文本文件。 sed命令常用的选项包括: - `-i`:直接修改输入文件,而不是输出到终端。 - `-e`:指定多个sed命令。 - `-n`:关闭默认输出,只输出经过处理的行。 - `-r`:使用扩展正则表达式。 - `-f`:从文件中读取sed脚本。 sed脚本由一系列的sed命令组成,每个命令可以是以下形式之一: - `address command`:指定对满足address条件的行执行command命令。 - `address1, address2 command`:指定对满足address1和address2之间的行执行command命令。 - `command`:对所有行执行command命令。 常用的sed命令包括: - `s/old/new/`:替换每一行中第一个匹配到的old字符串为new字符串。 - `s/old/new/g`:替换每一行中所有匹配到的old字符串为new字符串。 - `/pattern/d`:删除匹配到pattern的行。 - `p`:打印匹配到的行。 - `i\`:在指定行之前插入文本。 - `a\`:在指定行之后追加文本。 除了上述常用命令外,sed还提供了其他的命令和功能,如正则表达式的支持、分组引用、标签、循环等。 这只是sed命令的简要介绍,实际使用中可以根据具体需求选择合适的命令和选项。更详细的内容可以参考官方文档或者其他教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值