shell文本三剑客——sed命令

        Linux中主要用grep sed awl三个命令对文件内容增删改查,它们被称为"文本三剑客"。本篇我们讲的是sed命令的用法。他们都属于流编辑器,逐行处理文件数据。

sed命令

         sed的工作流程:读取--->执行--->显示。读取目标文件的每行数据依次加入到缓冲区(即模式空间)里,默认从第一行数据依次进行执行增删改查等命令,处理结束后将数据输出到屏幕显示。因为sed处理的整个过程是在模式空间中处理的,所以默认对原文本并不会进行更改,想要输出处理后的结果,需要重定向输出到一个新的文件中。

sed命令
格式

sed -n -e '操作' 文件1 文件2 ...

sed -e ‘操作1 -e ‘操作2'  目标文件1  目标文件2...    同时多个操作多个文件方法一

sed -e '操作1;操作2...'  目标文件1  目标文件2...    同时多个操作多个文件方法二

-e '查’操作'  目标文件1 目标文件2...    只是查操作时-e可以省略

sed -e 'n{
操作1
操作2
...
}' 文件1 文件2 ...

常用选项-e 或--expression=:表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用。sed -e '操作' 文件1 文件2 ...
-f 或--file=:表示用指定的脚本文件来处理输入的文本文件。sed -f 脚本文件 文件1 文件2 ...
-n、--quiet 或 silent:禁止sed编辑器输出,但可以与p命令一起使用完成输出。
-i:直接修改目标文本文件。sed -i -e '操作' 文件1 文件2 ...
常用操作s:替换,替换指定字符。
d:删除,删除选定的行。
a:增加,在当前行下面增加一行指定内容。
i:插入,在选定行上面插入一行指定内容。
c:替换,将选定行替换为指定内容。
y:字符转换,转换前后的字符长度必须相同。
p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用。
=:打印行号。
l(小写L):打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)

方法三:大括号可以省略

1.sed打印(查看)行内容——p

        查看文件内容打印到屏幕需要结合使用-n和p,不加-n会出现输出两遍,因为sed命令工作原理读取执行显示,我们看下不加-n是什么效果。

sed -n -e '1p' 1.txt       #查看第1行的内容

sed -n -e '4,$p' 1.txt     #查看4到最后一行的内容

sed -n -e '1,+2p' 1.txt   #查看第1行和他后2行的内容

sed '2q' 1.txt                #sed读取执行显示,执行显示到第2行后停止

sed -n -e '/1/p' 1.txt     #查看包含1的行内容

sed -n -e 'p;n' 1.txt      #从第一行开始打印,每次跳一行继续往下打印

sed -n -e '3,${n;p}' 1.txt    #从第三行开始,先跳一行再打印行内容

sed -n -e '1~3p' 1.txt   #打印第一行和从第一行开始每跨3行的行内容,也可以实现实现查看奇数行

sed -n -e '/^o/p' 1.txt   #打印o开头的行内容

sed -n -e '/ne$/p' 1.txt    #打印以ne结尾的行内容

sed -n -e '/ne$/=' 1.txt    #打印以ne结尾的行号

sed -n -e '/ne$/{p;=}' 1.txt   #打印文件中以ne结尾的行内容及行号

sed 过滤查看包含什么字符的行内容支持正则表达式,基础元字符可以直接使用,想要使用扩展元字符的话需要加-r才能实现。

sed -n -e '1,/ve$/{p}' 1.txt   #打印从第1行开始到以ve结尾的行内容

sed -n -e '2,/e/p' 1.txt     #打印从第2行开始到包含e的行内容

sed命令查看奇数行、偶数行内容

sed -n -e 'p;n' 1.txt  #打印奇数行

sed -n -e 'n;p' 1.txt  #打印偶数行

sed -n -e '1~2p' 1.txt  #打印奇数行

sed -n -e '2~2p' 1.txt  #打印偶数行

——-------------------------------------------------------------------------------------------------------------------------

2.sed删除行内容——d

sed '1d' 1.txt        #表示删除第一行

sed '1,3d' 1.txt     #表示删除第一行到第三行内容

sed '$d' 1.txt         #表示删除最后一行的内容

sed '5d;$d' 1.txt      #表示删除第5行和最后一行的内容

sed -e'/^$/d' 1.txt   #表示删除空行

sed -e '/b/d' -e '/e/d' 1.txt    #表示删除文件中包含b的行内容和包含e的行内容(这里有两个操作,不能省略-e)

sed '/e/!d' 1.txt   #感叹号表示取反,文件中除了包含e的行内容进行删除

sed -e '/o/,/t/d' 1.txt    #表示从包含o的行删除到包含t的行

sed -e '/1/,/2/d' 1.txt   #表示文本中所有从包含1的行到包含2的行内容都删除

删除空行的三种方法

①cat  file.txt | grep -v "^$"

②cat file.txt | tr -s '\n'

③sed -e -i '/^$/d' 1.txt   删除原文件里的空行,sed -i 直接修改原文件数据

使用自字符串做区间的‘/1,/3d’,要看删完以后有没有匹配的行内容,如果有他又会再执行删除操作,一般不用字符串开头。

————————————————————————————————————————

3. sed替换行内容

 s(字符串替换)    c(整行内容替换)     y(对应字符替换)

sed -e '指定行范围 s/旧字符串/新字符串/g'   跟vim编辑器里用法相似

sed -e '行号区间 s/old/new/g'           #替换行内容

sed -n -e '行号区间 s/old/new/gp'    #打印被修改的行        

sed -e '行号区间 s/old/new/gw 保存文件'     #保存被修改的行
sed -e '/字符串/ s/old/new/g'            #替换字符串
sed -r -e '/正则表达式/ s/old/new/g'   #替换匹配表达式的内容
sed -r -e 's/(xxx)(xxx)(xxx)/\3\2\1/'     #字符串重新排序

sed执行的时候可以先不加-i对原文件进行修改,确定生效的话再用-i对原文件进行操作

4.sed插入内容

sed -e ‘行号区间a 行内容’

sed -r -e ‘/字符串或正则/a 行内容’   正则表达式前面加-r   。sed -e执行时一个操作可以省略-e

a 在指定行下面添加行内容

i 在指定行上面插入行内容

r 在指定行下面插入整个文件内容(读入别的文件的内容到本文件中)

sed -e '行号区间r 文件'

5.sed复制粘贴

sed '行号H;行号G'

{H;d}复制后删除;再接粘贴

题目:用sed完成部署DNS服务器,解析www.xy101.com IP地址

  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值