Shell 指定行处理head、tail、sed
Shell 指定行处理 head、tail、sed
head 前几行
说明
用于显示文件开头部分的内容,从头开始显示,默认情况下显示前10行
基本语法
head filename 查看文件的前10行内容
head -n x filename 查看文件的前x行
head -n +x filename 查看文件从头开始到第十行
head -n -10 file.txt 从头开始,一直显示到倒数第十行之前
注意
其中n可以直接写成数字
可以接受管道
tail
说明
用于显示文件结尾的内容,从尾开始显示,默认情况下显示后10行
基本语法
tail 文件 查看文件后10行
tail -n x 文件 查看文件后x行内容
tail -n -x 文件 从尾开始显示,显示到正数第x行,从开头第x行开始显示
tail -f 文件 实时追踪该文件的所有更新。 常用
注意
其中n可以直接写成数字
可以接受管道指令
sed 删除、替换、新增、选取
sed本身是一个管道命令,可以分析标准输入,sed还可以将数据进行替换、删除、新增、选取特定等功能。
语法
在命令行指定sed指令对文本进行处理
sed 选项 ‘指令’ 处理的文件
sed [-nefr] [[n1,n2] function]
先将sed指令保存到文件中,将该文件作为参数进行调用
sed 选项 -f 包含sed指令的文件 处理的文件文件
-n 一般的用法中,所有来自stdin的数据都会被列出到屏幕,加上-n后,只有经过sed特殊处理的行(或操作(function))才会被列出来
-e 直接在命令行模式上进行sed的操作编辑
-i 直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改
-f 后跟保存了sed指令的文件,-f filename
-r:使用扩展正则表达式
[n1,n2] function
n1,n2 一般代表选择进行操作的行数,如10行到20行,'10,20'
a add追加 向匹配行后面插入内容
c change更改 更改匹配行的内容
i ins插入 向匹配的行前插入内容
d delet删除 删除匹配的内容
s 替换掉匹配的内容
p 打印 打印出匹配的内容,常与-n选项连用
n 读取下一行,遇到n回自动跳入下一行
= 用来打印被匹配的行的行号
r,w 读写命令,r用于将内容读入文件,w用于将匹配的内容写入到文档
案例
删除行
删除第2到第5行
[ranan@c107 ~]$ nl /etc/passwd | sed '2,5d'
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
删除第三行到最后一行,$表示最后一行
[ranan@c107 ~]$ nl /etc/passwd | sed '3,$d'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
从第一行开始删除,每隔2行就删除一行,删除奇数行
[ranan@c107 ~]$ nl /etc/passwd | sed '1~2d'
删除1~2之外的所有行
[ranan@c107 ~]$ nl /etc/passwd | sed '1,2!d'
删除从第一个匹配到的行到最后一行
[ranan@c107 ~]$ last -5
ranan pts/2 192.168.10.1 Mon Dec 6 15:20 still logged in
ranan pts/1 192.168.10.1 Mon Dec 6 12:26 still logged in
ranan pts/0 192.168.10.1 Mon Dec 6 11:06 still logged in
ranan pts/0 192.168.10.1 Sun Dec 5 21:05 - 10:03 (12:58)
reboot system boot 4.18.0-240.22.1. Sun Dec 5 21:04 still running
wtmp begins Sun May 23 20:25:21 2021
[ranan@c107 ~]$ last -5 | sed '/reboot/,$d'
ranan pts/2 192.168.10.1 Mon Dec 6 15:20 still logged in
ranan pts/1 192.168.10.1 Mon Dec 6 12:26 still logged in
ranan pts/0 192.168.10.1 Mon Dec 6 11:06 still logged in
ranan pts/0 192.168.10.1 Sun Dec 5 21:05 - 10:03 (12:58)
删除空行
[ranan@c107 ~]$ last -5 | sed '/^$/d'
删除1-3行中,匹配内容123的行,1,3表示匹配1-3行,{/123/d}表示删除匹配123的行
sed '1,3{/123/d}' 1.txt
插入行
插入多行用\分隔
[ranan@c107 ~]$ last -5 | sed '2a hellow\
> bb' #注意需要回车
ranan pts/2 192.168.10.1 Mon Dec 6 15:20 still logged in
ranan pts/1 192.168.10.1 Mon Dec 6 12:26 still logged in
hellow
bb
ranan pts/0 192.168.10.1 Mon Dec 6 11:06 still logged in
ranan pts/0 192.168.10.1 Sun Dec 5 21:05 - 10:03 (12:58)
reboot system boot 4.18.0-240.22.1. Sun Dec 5 21:04 still running
在包含ranan 的行之后插入hello,如果有多行,都会添加
[ranan@c107 ~]$ last -5 | sed '/ranan/ahello'
ranan pts/2 192.168.10.1 Mon Dec 6 15:20 still logged in
hello
ranan pts/1 192.168.10.1 Mon Dec 6 12:26 still logged in
hello
ranan pts/0 192.168.10.1 Mon Dec 6 11:06 still logged in
查看某行
查看并打印出来
[ranan@c107 ~]$ nl /etc/passwd | sed -n '2,3p'
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
替换某行
[ranan@c107 ~]$ nl /etc/passwd | sed '2,3c ranan'
1 root:x:0:0:root:/root:/bin/bash
ranan
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
包含ranan的行都替换为hello
[ranan@c107 ~]$ last -5 | sed '/ranan/chello'
hello
hello
hello
hello
reboot system boot 4.18.0-240.22.1. Sun Dec 5 21:04 still running
部分数据的查找并替换
sed 's/要被替换的字符/新的字符/g'
g 表示每一行的所有都替换了,默认只替换每行的第一个
一行一行进行查找替换
在last的每一行开头加一个#
[ranan@c107 ~]$ last -5 | sed '/^$/d'
ranan pts/2 192.168.10.1 Mon Dec 6 15:20 still logged in
ranan pts/1 192.168.10.1 Mon Dec 6 12:26 still logged in
ranan pts/0 192.168.10.1 Mon Dec 6 11:06 still logged in
ranan pts/0 192.168.10.1 Sun Dec 5 21:05 - 10:03 (12:58)
reboot system boot 4.18.0-240.22.1. Sun Dec 5 21:04 still running
wtmp begins Sun May 23 20:25:21 2021
[ranan@c107 ~]$ last -5 | sed '/^$/d'|sed 's/^/#/g'
#ranan pts/2 192.168.10.1 Mon Dec 6 15:20 still logged in
#ranan pts/1 192.168.10.1 Mon Dec 6 12:26 still logged in
#ranan pts/0 192.168.10.1 Mon Dec 6 11:06 still logged in
#ranan pts/0 192.168.10.1 Sun Dec 5 21:05 - 10:03 (12:58)
#reboot system boot 4.18.0-240.22.1. Sun Dec 5 21:04 still running
#wtmp begins Sun May 23 20:25:21 2021
将每行中第二个匹配的123替换为hello
[ranan@c107 ~] sed 's/123/hello/2' 1.txt
读写操作
将每行中所有匹配的123替换为hello,并将替换后的内容写入2.txt
[ranan@c107 ~]$sed -n 's/123/hello/gpw 2.txt' 1.txt
Shell 指定行处理head、tail、sed的更多相关文章
- shell 指定行插入
#如果知道行号可以用下面的方法 sed -i '88 r b.file' a.file #在a.txt的第88行插入文件b.txt awk '1;NR==88{system("cat ...
- Linux查看文件指定行数内容
1.tail date.log 输出文件末尾的内容,默认10行 tail -20 date.log 输出最后20行的内容 tail -n -20 date ...
- sed 指定行范围匹配(转)
sed -n '5,10{/pattern/p}' file sed是一个非交互性性文本编辑器,它编辑文件或标准输入 导出的文件拷贝.标准输入可能是来自键盘.文件重定向.字符串或变量,或者是一个管道文 ...
- sed 指定行范围匹配
sed -n '5,10{/pattern/p}' file sed是一个非交互性性文本编辑器,它编辑文件或标准输入 导出的文件拷贝.标准输入可能是来自键盘.文件重定向.字符串或变量,或者是一个管道文 ...
- SHELL 在指定行的前/后插入指定内容
#如果知道行号可以用下面的方法 sed -i '88 r b.file' a.file #在a.txt的第88行插入文件b.txt awk '1;NR==88{system("cat ...
- [Linux] sed命令使用之在文件中快速删除/增加指定行
1.删除文档的第一行 sed -i '1d' <file> 2.删除文档的最后一行sed -i '$d' <file> 3.在文档指定行中增加一行例如文档如下:echo &qu ...
- linux tail + head 查看指定行
取出一段数据后,需要获取指定行 file # 前10行 file # 不要最后10行的前面所有行 file # 后10行 file # 不要前面10行的后面所有行 | # 不要前后10行剩余的所有行
- sed 删除最后几行 和删除指定行 awk使用
sed 删除最后几行 和删除指定行 转载原文链接:http://blog.51cto.com/lspgyy/1305489 sed 想删除文件中的指定行,是可以用行号指定也可以用RE来匹配的. 删 ...
- shell,计算指定行的和,计算指定列的和
有一个文本文件,里面某行某列为数字,那么如何用shell计算指定行(列)的和,方法如下 计算指定行的和: awk 'NR==3{for(i=1;i<=NF;i++)sum=sum+$i;}END ...
随机推荐
- NOIP模拟86(多校19)
T1 特殊字符串 解题思路 \(f_{i,j}\) 表示前 \(i\) 个字符中结尾为 \(j\) 的最大贡献. 转移枚举当前位置于之前位置结尾的组合加上贡献即可. 对于边界问题,容易发现选择 1 一 ...
- python中将xmind转成excel
需求:最近公司项目使用tapd进行管理,现在遇到的一个难题就是,使用固定的模板编写测试用例,使用excel导入tapd进行测试用例管理,觉得太过麻烦,本人一直喜欢使用导图来写测试用例,故产生了这个工具 ...
- Harbor仓库搭建及使用
目录 一.docker配置 二.安装docker-compose 三.安装harbor 四.管理harbor 五.springboot项目配置docker 六.linux服务器上打包并推送至harbo ...
- 精心整理Java微服务最全面试题集(含答案)
微服务架构相关 大型网站架构演变过程 网站架构演变演变过程 传统架构 → 分布式架构 → SOA架构 → 微服务架构 什么是分布式架构 分布式架构就是将传统结构按照模块进行拆分,不同的人负责不同的模块 ...
- Typora简介
Typora是什么 Typora是一款支持实时预览的Markdown文本编辑器,拥有macOS.Windows.Linux三个平台的版本,并且完全免费. 下载地址:https://www.typora ...
- BugKu之备份是个好习惯
题目:备份是个好习惯 思路分析 打开题目,看到一个字符串. 联系到题目,就猜到肯定是源代码泄露,用工具扫一下,发现了index.php.bak,验证了我的猜想,下载下来看看. <?php /** ...
- Java测试开发--Java基础知识(二)
一.java中8大基本类型 数值类型:byte.short.int .float.double .long 字符类型:char 布尔类型:boolean 二. 封装:将属性私有化,不允许外部数据直接访 ...
- 使用Abp vnext构建基于Duende.IdentityServer的统一授权中心(一)
原来看到很多示例都是基于IdentityServer4的统一授权中心,但是IdentityServer4维护到2022年就不再进行更新维护了,所以我选择了它的升级版Duende.IdentitySer ...
- CPU被挖矿,Redis竟是内鬼!
却说这一日,Redis正如往常一般工作,不久便收到了一条SAVE命令. 虽说这Redis常被用来当做缓存,数据只存在于内存中,却也能通过SAVE命令将内存中的数据保存到磁盘文件中以便持久化存储. 只见 ...
- 设计模式学习-使用go实现享元模式
享元模式 定义 优点 缺点 适用场景 代码实现 享元模式和单例模式的区别 参考 享元模式 定义 享元模式(Flyweight),运用共享技术有效的支持大量细粒度的对象. 享元模式的意图是复用对象,节省 ...