目录
绪论
1、sed的原理:读取 执行 显示 三个过程
2、sed 文本内容处理工具,文件过大怎么办?
3、sed的操作选项
3.1 常用选项
3.2 操作符
3.3 行号的范围打印
3.4 对包含指定字符串的内容进行打印
3.5 删
3.5.1 正则表达式删除
3.6 替换
3.6.1 字母字符的大小写替换
3.7 整行替换和单字符替换
3.8 增加
3.9 sed命令当中字符串的位置进行交换
3.10 取日志范围
绪论
sed:类似于vim就是一个文本编辑器,按行来编辑和处理,针对文件内容的行进行处理
主要作用是对文本内容进行增删改查,sed可以支持正则表达式,支持扩展正则表达式
1、sed的原理:读取 执行 显示 三个过程
读取:读取文本内容后,读取到的内容存放到临时的缓冲区,模式空间
执行:在模式空间,根据读取的文本内容,按行执行,除非指定引号,否则会遍历所有行,从上往下执行
显示:执行完后,把执行结果打印,如果要改变生效,模式空间被修改的内容会写入到指定的文件当中,只是操作,但是不最终写入文件,只展示结果,展示完后,模式空间的数据立即删除
2、sed 文本内容处理工具,文件过大怎么办?
split拆分文件
或者通过 cat 文件名 | sed 处理(只适用于中兴文件,大型文件还是先分割)
3、sed的操作选项
sed -e '操作' 文件1 -e '操作' 文件2
3.1 常用选项
-e :条件操作选项
-f :指定脚本文件来处理输入的文件内容,把命令写在脚本里,用脚本里的命令来处理第二个文件里面的内容
-i :立即生效 慎用
-n :显示script处理之后的结果
3.2 操作符
s 替换指定字符
d 删除指定的行
a 增加在当前的下面插入指定内容
i 增加,在指定行的上面插入指定的内容
c 替换,整行替换
y 替换字符,但是替换前后的字符长度必须一致
p 打印
r 扩展正则
sed的核心就是改,删 ,增 查是没有grep强大
sed ' ' :查看打印功能
eg:sed ' ' /etc/passwd
只输出行号:sed -n '=' ky30.txt
输出行号和内容:sed -n '=;p' ky30.txt
打印指定行:sed -n '2p' ky30.txt
直接打印最后一行:sed -n '$p' ky30.txt
3.3 行号的范围打印
sed -n '1,3p' ky30.txt 打印1到3行
sed -n '2,+2p' ky30.txt 打印第2到第4行
sed -n '2p;$p' ky30.txt 打印第二行和最后一行
3.4 对包含指定字符串的内容进行打印
sed -n '/o/p' ky20.txt 把所有包含o的行会全部打印
sed -r -n '/(99:){2}/p' /etc/passwd 把有99的那行打印
3.5 删
sed "d" ky30.txt
eg:怎么不进人文件就可以删除文件的内容(免交互删除)
sed -i 'd' ky30.txt或者 cat /dev/null > ky30.txt
指定行号进行删除:
sed -n '3d;p' ky30 删除第三行,打印剩余行内容
sed -n '|d;3d;p' ky30.txt
sed '/big/!d' ky30.txt 除了big这行不删除
3.5.1 正则表达式删除
sed '/^$' ky30.txt 删除空行
3.6 替换
s:替换字符串
c:整行替换
y:单字符替换,前后长度保持一致
sed -n 's/root/test/p' /etc/passwd 替换每行的第一个root为test,想要替换第二个在p前面加一个2,想要替换全部在p前面加个g
3.6.1 字母字符的大小写替换
sed 's/[a-z]/\u&/' ky30.txt 首字母变大写了
sed 's/[a-z]/\u&/g' ky30.txt所有字母都生效
l&转换成小写的特殊符号,在使用时,需要转义符\
eg:sed 's/[A-Z]\l&/g' ky30.txt
u&转换成大写的特殊符号,在使用时,需要转义符\
g 全部替换,如果不加,只会更改首字符
3.7 整行替换和单字符替换
sed '/exy/c zhangsan is sexy' ky30.txt 将exy替换成zhangsan is sexy
字符串替换前后长度要相同:y
sed 'y/a/1/' ky30.txt 将a换成1
3.8 增加
a:在下一行添加
i:在上一行添加
r: 在行后读入指定文件内容
eg:sed '/123/a 456' ky30.txt
sed '/bighouse/r ky31.txt' ky30.txt 前面为要读的文件 后面为本文件
3.9 sed命令当中字符串的位置进行交换
sed -r 使用扩展正则
echo ky30lt | sed -r 's/(ky30)(lt)/\2\'p
汉字换位:
echo 汉字 | sed -r 's/(.)(.)/\2\1/'
sed -f: 指定脚本文件来处理输入的文件内容,把命令写在脚本里,用脚本里的命令来处理第二个文件里面的内容
3.10 取日志范围