个人网站网页首页,wordpress改变上传目录,做门户网站私活多少钱,张槎网站开发目录 一、sed简介#xff08;行编辑器#xff09;
二、基本用法
三、sed脚本格式#xff08;匹配地址 脚本命令#xff09;
1、不给地址#xff0c;那么就是针对全文处理
2、单地址#xff0c;表示##xff0c;指定的行#xff0c;$表示最后一行#xff0c;/pattt…目录 一、sed简介行编辑器
二、基本用法
三、sed脚本格式匹配地址 脚本命令
1、不给地址那么就是针对全文处理
2、单地址表示#指定的行$表示最后一行/pattter/表示该模式能匹配到的每一行正则表达式
3、地址范围
## 从第几行到第几行
##从第几行开始往后加4行
/patter1//patter2/ 表示从第一个开始找到第二个结束
4、步进~
1~2表示奇数行
2~2表示偶数行
3~3表示可以3的倍数行
5、高级空间用法
sed -n n;p 表示打印偶数行表示从第一行开始先放入高级空间下一行打印反复以往表示打印偶数行
sed -n 2,${n;p} 表示奇数行表示从第二行开始先放入高级空间下一行打印反复以往表示打印奇数行 四、搜索替代
五、分组后项引用
面试题一可以自定义输出匹配内容的顺序
面试题二使用sed的分组后项引用来提取ip地址
面试题三提取版本号
面试题四提取文件的权限
面试题五提取访问日志中的状态码
面试题六、提取日志的状态码 一、sed简介行编辑器
Sed是从文件或管道中读取一行处理一行输出一行再读取一行再处理一行再输出一行直到最后一行。每当处理一行时把当前处理的行存储在临时缓冲区中称为模式空间PatternSpace接着用sed命令处理缓冲区中的内容处理完成后把缓冲区的内容送往屏幕。接着处理下一行这样不断重复直到文件末尾。一次处理一行的设计模式使得sed性能很高sed在读取大文件时不会出现卡顿的现象。如果使用vi命令打开几十M上百M的文件明显会出现有卡顿的现象这是因为vi命令打开文件是一次性将文件加载到内存然后再打开。Sed就避免了这种情况一行一行的处理打开速度非常快执行速度也很快。
sed支持 标准输入、标准输出、文件名 二、基本用法
语法sed [命令选项] 匹配地址 脚本命令 文件名或标准输出或标准输入
常用的命令选项
选项功能-n不输出模式空间的内容到屏幕即不自动打印-e多点编辑器相当于/匹配1|匹配2/-f filename从指定文件中读取编辑脚本-r,-E使用扩展正则表达式-i.bak备份文件并原处编辑#说明: -ir 不支持 -i -r 支持 -ri 支持 -ni 会清空文件 sed -i 作为行编辑器一旦生效无法撤回所以强烈建议修改的时候加上-i.bak可以进行备份
[rootlocalhost data]#sed -i.bak 1,4d html.txt
[rootlocalhost data]#cat html.txt
http://www.google.com/index.html
http://www.yahoo.com.cn/put.html
[rootlocalhost data]#ls
123.txt html.txt html.txt.bak md5.txt sort.sh uniq.sh
[rootlocalhost data]#cat html.txt.bak ##bak也可以是别的字母只是因为bak是backup的缩写所以常使用bak 三、sed脚本格式匹配地址 脚本命令
1、不给地址那么就是针对全文处理 2、单地址表示#指定的行$表示最后一行/pattter/表示该模式能匹配到的每一行正则表达式
3、地址范围
## 从第几行到第几行
##从第几行开始往后加4行
/patter1//patter2/ 表示从第一个开始找到第二个结束 4、步进~
1~2表示奇数行
2~2表示偶数行
3~3表示可以3的倍数行 5、高级空间用法
sed -n n;p 表示打印偶数行表示从第一行开始先放入高级空间下一行打印反复以往表示打印偶数行
sed -n 2,${n;p} 表示奇数行表示从第二行开始先放入高级空间下一行打印反复以往表示打印奇数行 这些脚本命令一般与命令选项-i一起搭配使用
脚本命令操作
p打印如果是同时指定行表示打印指定行如果不指定行则表示打印所有内容如果有非打印字符则以ASCII码输出。其通常与“-n”选项一起使用。
q表示到第几行就退出必须从第一行开始3q就是1-3行
s替换替换指定字符
d删除删除选定的行
a增加在当前行下面增加一行指定内容
i插入在指定行上面插入一行指定内容
c替换将指定的行替换为指定内容整行替换
y字符替换转换前后的字符长度要一致
打印行号这个是在前一行打印
r表示读取文件内容放入指定行后面
ww file 保存模式匹配的行至指定文件
! 表示模式空间中匹配行取反处理
##没有-n单独就是3q使用可以表示打印前几行
[rootlocalhost data]#cat /etc/passwd|sed 3q
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin[rootlocalhost data]#seq 5|sed 3ahhhh[rootlocalhost data]#seq 5|sed 3ahhhh\n hhhh[rootlocalhost data]#seq 5|sed 3a hhhh[rootlocalhost data]#seq 5|sed 3a\ hhhh[rootlocalhost data]#seq 3|sed 2r /etc/issue
1
2
\S
Kernel \r on an \m3
[rootlocalhost data]#seq 3|sed 2w /data/2.txt
1
2
3
[rootlocalhost data]#cat 2.txt
2 四、搜索替代
s/pattern/string/修饰符 查找替换,支持使用其它分隔符可以是其它形式ss###
替换修饰符
g 行内全局替换
2 表示行内的第2个匹配内容
p 显示替换成功的行
w /PATH/FILE 将替换成功的行保存至文件中
I,i 忽略大小写sed s/root/er/g /etc/passwd
#指代之前找到的内容
替换的内容应该是一个指定的存在的内容不可以用正则表达式这里可以用这个符号指代前面匹配到的内容 五、分组后项引用
虽然sed是用来一行一行处理的但是还是可以利用分组后项引用的办法来提取有相同标志的列
两种方式①先匹配关键字的前后部分有什么特点②找到关键字的特点将整行用正则表达式采用分组表示
面试题一可以自定义输出匹配内容的顺序
面试题二使用sed的分组后项引用来提取ip地址
[rootlocalhost data]#ifconfig ens33|sed -rn 2s/.*inet ([0-9.]) .*/\1/p
192.168.20.8
[rootlocalhost data]#ifconfig ens33|sed -n 2pinet 192.168.20.8 netmask 255.255.255.0 broadcast 192.168.20.255
[rootlocalhost data]#面试题三提取版本号
[rootlocalhost data]#cat jar.txt |sed -nr s/.*-(.*).jar/\1/p
[rootlocalhost data]#cat jar.txt |awk -F(-|.jar) {print $(NF-1)}面试题四提取文件的权限
[rootlocalhost data]#stat 2.txt 文件2.txt大小2 块8 IO 块4096 普通文件
设备fd00h/64768d Inode20205496 硬链接1
权限(0644/-rw-r--r--) Uid( 0/ root) Gid( 0/ root)
最近访问2023-11-28 18:27:04.306430260 0800
最近更改2023-11-28 18:26:57.672457605 0800
最近改动2023-11-28 18:26:57.672457605 0800
创建时间-
[rootlocalhost data]#stat 2.txt |sed -nr 4s/.*([0-9]{4}).*/\1/p
0644[rootlocalhost data]#stat 2.txt |sed -n 4p|egrep -o [0-9]{4}
0644[rootlocalhost data]#stat 2.txt |awk -F[(/] NR4{print $2}
0644 面试题五提取访问日志中的状态码
[rootlocalhost data]#cat log |head -5|awk -F, {print $2}面试题六、提取日志的状态码
[rootlocalhost data]#cat log |sed -nr s/.*HTTP\/1.1 ([0-9]{3}) .*/\1/p|sort|uniq -c|sort -nr48814 30227141 20020057 4991674 4041317 40397 2062 408