目录
一、sed概述
1.sed命令的常用选项:
2.sed命令的操作符:
二、sed命令的打印功能
(一)默认打印方式:
1.sed -e 'p' 123123.sh --sed有一个默认输出,加上p,会打印两行
2. sed -n 'p' 123123.sh -- -n禁止了默认输出,就只有一行
3. 打印时对行号的操作sed -n '=' 123123.sh --只显示行号
4. 显示行号和每行的内容 sed -n '=;p' 123123.sh
(二)sed命令的寻址打印:
1.方式一:按照行号寻求内容
2.方式二:进行行号范围区间的打印
3.方式三:指定间隔打印
4.方式四:对奇数行和偶数行的打印
二、文本模式过滤行内容
1.方式一:对包含的字符串进行过滤打印
2.方式二:应用基础正则表达式进行打印
3.方式三:使用扩展正则表达式进行打印
三、sed的删除操作:
1.通过行号进行删除
2.匹配字符串内容删除
四、sed替换命令:
1.sed命令的增加:
五、总结:
sed是文本处理工具,读取文本内容,根据指定的条件进行处理,如增删改查等,可以在无交互的情况下实现相当复杂的文本处理操作,sed被广泛应用于shell脚本,以完成自动化处理任务。
sed也是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,成为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非使用重定向存储输出。sed主要用来自动编辑一个或多个文件;简化对文件的反反复复操作;编写转换程序等。
sed依赖于正则表达式
sed的工作原理:读取→执行→显示
基本操作格式:
sed -e '操作' 文件1 文件2
sed -e '操作' 文件1 文件2
sed -f 脚本操作 文件1 文件2
sed -i -e '操作' 文件1 文件2
执行多条命令的格式:
方式一:sed -e '操作1' -e '操作2' 文件
方式二:sed -e '操作1;操作2' 文件
方式三:sed -e 'n{
操作1
操作2
......
}' 文件1
-e或--expression:表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用
-f或--file=:表示用指定的脚本文件来处理输入的文本文件。
-h或--help:显示帮助。
-i:直接修改目标文本文件
-n:仅显示script处理后的结果
s:替换,替换指定字符。
d:删除,删除选定的行。
a:增加,在当前行下面增加一行指定内容。
i:插入,在选定行上面插入一行指定内容。
c:替换,将选定行替换为指定内容。
y:字符转换,转换前后的字符长度必须相同。
p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与"-n"选项一起使用。
=:打印行号。
l(小写L):打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)。
r:高级正则表达式。
sed最为核心的功能是增删改查
sed -n '1p' 123123.sh --打印第1行
sed -n '4p' 123123.sh --打印第4行
sed -n '$p' 123123.sh --打印最后一行
sed -n '1,3p' 123123.sh --打印1-3行
sed -n '5,$p' 123123.sh --打印第五行到最后一行
sed -n '2,+2p' 123123.sh --打印第二行+两行的内容,相当于2,4p
打印前n行:
sed -e '5q' 123123.sh
sed -n -e '3p' -e '8p' 123123.sh -- 打印第3行和第8行
sed -n -e '2p' -e '$p' 123123.sh -- 打印第2行和最后一行
sed -n 'n;p' 123123.sh -- 打印偶数行 'n'代表next
sed -n 'p;n' 123123.sh -- 打印奇数行
这里的n就是指高级模式的意思,n在p前面,跳过一行,打印下一行,就是偶数行;在后面,就是打印第一行,然后跳过一行,形成奇数行。
//中间表示存放指定的内容
sed -n '/591/p' 123123.sh -- 打印包含591的行
sed -n '/o/p' 123123.sh -- 打印包含o的行
sed -n '/wo/p' 123123.sh -- 打印包含wo的行
sed -n '/^root/p' 123123.sh -- 打印以root为开头的所有内容,全文本搜索
sed -n '/bash$/p' 123123.sh -- 打印以bash结尾的所有内容,全文本搜索
sed -n '4,/bash$/p' 123123.sh -- 从第四行开始,一直打印到第一个以bash为结尾的所在行
注意:
sed -r 支持扩展正则表达式。同时在使用{n}、{n,}、{n,m}时,括号{}前不需要加反斜杠\。
sed -i 时会对文本进行实际操作(建议对目标文件先进行备份,再进行操作)
sed -n '3d;p' 123123.sh -- 删除第三行,打印剩余的所有内容
sed -n '5,8d;p' 123123.sh -- 删除5到8行,打印剩余的所有内容
sed -n '5,$d;p' 123123.sh -- 删除5到最后一行,打印剩余的所有内容
sed '4,6!d;p' 123123.sh -- 除了4-6行,其他的全部删除
sed '/one/d' 123123.sh -- 删除包含one的行
sed '/one/,/six/d' 123123.sh -- 删除one到six的行
sed '/one/,/six/!d' 123123.sh -- 除了one到six的行,其余的全部删除,反向删除
sed '/six/!d' 123123.sh -- 除了six的行,其余的全部删除,反向删除
sed '/^$/d' 123123.sh -- 删除文本空行
格式:行范围 s/旧字符/新字符/替换标记 文件名
替换标记:
数字:表明新字符串将替换地基础匹配的地方
g:表明新字符串将会替换所有匹配的地方
p:打印与替换命令匹配的行,与-n一起使用
w文件:将替换的结果写入文件中
sed命令的替换中:
s:替换字符串
c:整行替换
y:字符替换,替换前后的字符串长度必须相同
命令示例:
sed -n 's/root/test/2p' /etc/passwd -- 指定第二个rooot,替换为test
sed -n 's/root/test/gp' /etc/passwd -- 所有的root都替换为test
sed -n '/^root/ s/^/#/p' /etc/passwd -- 以root开头开始处理,把开头为空的替换为#,相当于将整行添加注释#
字母字符进行大小写的替换:
sed 's/[A-Z]/\l&/g' 123123.sh
-- 将大写全部转换为小写,l&是转换小写的一种特殊的符号,前面要加转义符"\"。
sed 's/[a-z]/\u&/' 123123.sh -- u&是转换首字母大写的一种特殊的符号,前面要加转义符"\"。
sed 's/[a-z]/\U&/g' 123123.sh -- 末尾加上了一个g,表示全部转换成大写
整行替换:
sed '/ONE/c ok' 123123.sh -- 将含有ONE的整行替换为ok
sed '/TWO/c TEST' 123123.sh -- 将含有TWO的整行替换为TEST
单字符的替换:
使用y,是对单个字符进行替换,每个字符需要一一对应,不是整体替换。前后字符串长度需要一致,不然会报错。
sed 'y/YH/78/' 123123.sh -- 将TH替换为78
sed 'y/aaa/123' 123123.sh -- 只匹配一次,输出111
a:在行后添加内容
i:在行前面插入内容
r:在行后读入文件内容
命令示例:
sed '/three/a 123' 123123.sh
sed '/three/i 123' 123123.sh
sed '$r test2.txt' 123123.sh -- 先读取test2内容,然后在123123.sh的末行插入test2.txt的所有内容。
1.sed命令时一种流编辑器读取文件会进行逐行读取加上指令操作,所以过大的文件一定要拆分后再交给sed处理。
2.sed -r 搭配扩展正则表达式使用,使用\{n\} \{n,\} \{n,m\} 不需要加"\"。
3.用-i时一定要先备份(尤其对重要文件的操作),或者事先试验好确定无误时,再使用-i。
4.sed命令的重点在于增删改查四个功能,可以运用再脚本中重要配置文件的修改、添加等作用尤其有效。