sed编辑器

Linux文本三剑客: grep sed awk

grep(查) ,按行处理

sed(行编辑器),按行处理

sed是一种流编辑器,每一次处理内容,只有确认,才会生效,如果不确认,只是把模式空间的临时数据展示给用户,然后删除

按照文本的行,一行一行向下处理,只到文件的最后一行

默认情况下,sed都是在模式空间执行,因此原文件不会发生变化,要变化怎么办??

sed的操作格式

sed -e "操作" 文件1 文件2

sed -e "操作1;操作2" 文件

-e:指定命令来处理输入的文本文件,只有一个操作,-e可以省略。多个指令才会用-e

-f:用特点的脚本文件来处理输入的文件

-i:立即生效

-n:仅显示script 处理后的结果

sed -i 立即生效 慎用

sed的操作符:

p:打印

=:只打印行号

打印:

sed -e 'p' test.txt

sed自己还有一个默认输出,再加上打印,一共两行

sed -ne ‘p’ test.txt

取消默认输出

sed -n '2p' test.txt

输出指定行的内容,只有第二行

sed -n '=' test.txt

只显示行号

sed -n '=;p' test.txt

显示行号和内容

sed -n '$p' test.txt

打印最后一行

sed -n '1,3p' test.txt

第一行到第三行

sed -n '1p;2p' test.txt

第一行和第二行

sed -n '1p;$p' test.txt

sed -n -e '1p' -e '$p' test.txt

第一行到最后一行的两种写法

sed -n 'n;p' test.txt

n在p前面,跳过当前一行,打印下一行 偶数行

p在前面,则打印当前一行,跳下一行继续使用 奇数行

文本内容过滤-----sed

sed编辑器_第1张图片

sed -n '/xx/p' test.txt

xx为需要过滤的内容

使用正则表达式过滤

sed -n '/^root/p' /etc/passwd

用正则表达式过滤root开头的行

sed -n '/bash$/p' /etc/passwd

用正则表达式过滤bash结尾的行

sed -n '4,/bash$/p' /etc/passwd

第四行到第一个bash

sed使用扩展正则表达式,

sed -r 表示可以使用扩展正则。{n} {n,} {n,m} {,m}

思考题:

1.包含两个99:的所在行

sed -nr '/(99:){2}/p' /etc/passwd

2.打印所有要么是以root开头,要么是以bash为结尾的行,打印

sed -nr '/^root|bash$/p' /etc/passwd

sed删除文件:

现在有一个文件,文件名我想保留,但是原有内容我要删除,免交互删

方法一

方法二

"d":操作符,删除的意思,对行操作

删除指定行

sed -n '3d;p' test.txt

sed编辑器_第2张图片

删除第五行到最后一行

sed -n '5,$d;p' test.txt

sed编辑器_第3张图片

除了一到四,其余删除(!取反)

sed  -n '1,4!d;p' test.txt

sed编辑器_第4张图片

一到六行删除(包括1和6)

sed '/one/,/six/d' test.txt

sed编辑器_第5张图片

过滤空行

cat test.txt | sed '/^$/d'

sed编辑器_第6张图片

我们用grep也可以实现

sed编辑器_第7张图片

sed 修改替换功能

操作符

s:替换字符串

sed编辑器_第8张图片

意思为替换第几个出现的root,然后替换

sed -n 's/root/test/gp' /etc/passwd 全量替换

思考题

1.以root开头处理,把开头为空的替换成# /etc/passwd

sed -n '/^root/ s/^/#/gp' /etc/passwd

2.对字母字符进行大小写替换

l&:转换为小写的特殊符号,在前面加上转义符才可以

sed 's/[A-Z]/\l&/g' test.txtsed编辑器_第9张图片

把小写换成大写

u&:转换成大写的转移符号

u换成大写的U,然后加上g就可以全部换成大写

sed编辑器_第10张图片

c:整行替换

sed '/one/c 22' test.txt

思考题:通过ifconfig修改ip:

cat ifcfg-ens33 | sed '/IPADDR/c IPADDR=1.1.1.1'

sed编辑器_第11张图片

y:单字符替换,替换前后的字符长度要保持一致

sed 'y/on/12/' test.txt

将o替换成1,n替换成2

前后长度要保持一致,若后者数量多余前者,会报错

sed编辑器_第12张图片

sed--增

a:在匹配行的下一行添加内容

sed '/three/a zzr' test.txt

sed编辑器_第13张图片

i:在匹配行的上一行添加内容

sed '/three/i 哈哈哈' test.txt

sed编辑器_第14张图片

r:可以从其他文件读取内容,然后在匹配行的行后添加

可以直接在文本末行添加

sed '$a 123' test.txt

sed编辑器_第15张图片

sed当中字符串分组询问sed编辑器_第16张图片

用脚本运行   -f

将空格替换为下划线

命令文件

处理对象为456.txt

sed编辑器_第17张图片

思考题:过滤文件中的数字

sed编辑器_第18张图片

sed编辑器_第19张图片

当然。用grep一步就可以完成:

sed编辑器_第20张图片

总结:

sed可以增,删,改,查

sed也可以结合正则表达式,但是sed的最主要作用就是改,增

使用sed命令时注意一点:大文件一定要分隔之后再交给sed处理

搭配扩展正则:sed -r {n} {n,m} {,m} 可以不需要加\

使用sed -i 立即生效,要注意事先做好测试,还要做好备份

你可能感兴趣的:(linux,运维,服务器)