Linux:Shell编辑之文本处理器(sed)

目录

绪论

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 取日志范围 

 

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