文章目录
- 前言
- 一、pandas是什么?
- 二、使用步骤
- 1.引入库
- 2.读入数据
- 总结
前言
Liunx中筛选文本时常用的命令,常常会被提及文本三剑客,前文我们学习了文本三剑客中的grep 命令,除了grep命令我们也常用到sed命令,sed命令有着grep命令独有的功能!
一.概述
sed
是一种流编辑器,用于在文本流中进行操作。它可以用来进行文本替换、文本删除、文本提取和文本转换等任务。sed
将输入文本作为流处理,并可以对其进行修改,然后将修改后的文本输出到标准输出或将其重定向到文件中。
工作原理
sed 的工作流程主要包括读取、执行和显示三个过 程:
- 读取:sed 从输入流(文件、管道、标准输入)中读取 一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。
- 执行:默认情况下,所有的sed 命令都在模式空间中顺 序地执行,除非指定了行的地址,否则sed 命令 将会 在所有的行上依次执行。
- 显示:发送修改后的内容到输出流。在发送数据后,模 式空间将会被清空 重复上述过程,直到将文件中所有数据处理完毕
- 模式空间:sed在内存里开辟的空间,处理文件的每个输入行
- 保持空间:保存处理过的输入行(将第一行的处理结果保存到该空间后继续处理第二行)
- 将所有行处理结束后,再将保留空间的内容写入硬盘
- 临时缓冲区:模式空间
-
二.sed命令
- 格式:
-
sed -参数 '[定址符]' '操作' 文件名
参数:
-
-n :一般配合行号使用,使用-n后,仅显示被处理的行 -i:直接编辑原文件,而不是由屏幕输出,默认不对原文件进行操作 -e:对文本进行多个动作时,使用-e将动作分开执行 -r:使用扩展正则表达式 -f:类似于输出重定向符号,直接将sed动作写入一个文件内 -{} :可组合多个命令,以分好隔开
定址符:
-
用于指定sed命令处理的行范围
-
1,5:对文件的1-5行内容进行处理 2,$:对文件的2到最后一行内容进行处理 1,+3:对文件第1行以及以后的3行内容进行处理 1~2:对文件的1,3,5,7,……的行内容进行处理 /正则表达式/:对任何能够被正则表达式匹配到的行进行处理
操作:
-
增删改查 执行增删改查等动作
-
s:替换,替换指定字符,一般搭配正则表达式 d:删除,删除选定的行。 p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;其通常与“-n”选项一起用。 =:打印行号。 a:增加,a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行) i:插入,i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行) c:行替换,指定行中的所有内容,替换成该选项后面的字符串。 y:字符转换,转换前后的字符长度必须相同。 l(小写):打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t) ! :对指定行以外的所有行应用命令 & :代表匹配到的内容
三.案列
-
使用 n .=.p 打印
-
[root@server ~]# sed -n '=;p' sed1.txt #打印文件中所有内容,并显示行号 #分号;用于将操作命令串联使用 #-e 作用和分号相同 格式为 -e '操作' -e '操作'
-
[root@server ~]# sed -n '1p' sed1.txt #打印第一行 one
-
数字,数字
-
[root@server ~]# sed -n '3,9p' sed1.txt # 打印3-9行 three four five six seven eight nine
2,$
-
:对文件第7行到最后一行进行处理
-
[root@server ~]# sed -n '7,$p' sed1.txt
-
1~2:
- 对文件的1,3,5,7,……的行内容进行处理
[root@server ~]# sed -n '2~2p' sed1.txt
#从第2行开始以2为步长打印偶数行
-
!
- :对指定行以外的所有行应用命令
[root@server ~]# sed -n '1!p' sed1.txt
#打印除了第1行的剩余行信息
-
分号;
- 将操作串联
[root@server ~]# sed -n '4p;6p;8p'
# 打印4 6 8行
1,+3:
- 对文件第1行以及以后的3行内容进行处理
[root@server ~]# sed -n '1,+2p' sed1.txt
#打印第一行及以下2行
/正则表达式/
[root@server ~]# sed -n '/^f/p' sed1.txt
# 以正则条件检索行并打印
#打印以f开头的行 定址符/正则表达式/ 使用正则表达式为条件筛选行并打印(p)
[root@server ~]# sed -n '/t/p' sed1.txt
# 检索包含t的行信息
分号代表或关系
[root@server ~]# sed -n '/^t/p ; /^f/p'
sed1.txt # 检索以t开头或以f开头
特殊结构
[root@server ~]# sed -n 'p;n' sed1.txt
# 奇数行
#特殊结构n;p 打印偶数行 p;n 打印奇数行 $= 显示行数
四.文本替换
sed '行范围s/旧字符串/新字符串/替换标记' 文件名
#s:替换动作 未写行范围代表对全文进行操作
- 行范围:使用数字表示,即对第几行到第几行进行替换处 理,若省略则表示进行全文处理
- s: 替换动作 替换标记 数字:使用1-512之间的数字,表示指定需要替换的字 符串出现第几次才进行替换
- 替换标记
- g:对数据中所有匹配到的内容进行替换,若省略g则 只会对第一次匹配的内容进行替换
- p:替换成功立刻打印,一般与-n一起使用
- w 文件名 : 将缓冲区的内容写入到指定文件中
- & : 使用正则表达式匹配的内容进行替换
- \ :转义符,若有特殊符号或路径则需要转义
案列
- # 替换所有的root为boot
[root@server ~]# sed 's/root/boot/gp' ps #p:仅显示处理过的结果
#g:对文中匹配的内容进行全部替换,不加g表示仅替换找到内容中第一个匹配到的目标
#提换每一行第一个root为admin
[root@server ~]# sed -n 's/root/admin/p' ps
- #替换每一行的第2个root为admin
[root@server ~]# sed -n 's/root/admin/2p' ps
- # 将/sbin/nolgin 替换为 /bin/bash
[root@server ~]# sed -n 's/\/sbin\/nologin/\/bin\/bash/gp' ps
#由于sed替换命令中自带/格式,当替换的文本中包含/代表路径时需要加转义符\