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的更多相关文章

  1. shell 指定行插入

    #如果知道行号可以用下面的方法 sed -i '88 r b.file' a.file    #在a.txt的第88行插入文件b.txt awk '1;NR==88{system("cat ...

  2. Linux查看文件指定行数内容

    1.tail date.log               输出文件末尾的内容,默认10行 tail -20  date.log        输出最后20行的内容 tail -n -20  date ...

  3. sed 指定行范围匹配(转)

    sed -n '5,10{/pattern/p}' file sed是一个非交互性性文本编辑器,它编辑文件或标准输入 导出的文件拷贝.标准输入可能是来自键盘.文件重定向.字符串或变量,或者是一个管道文 ...

  4. sed 指定行范围匹配

    sed -n '5,10{/pattern/p}' file sed是一个非交互性性文本编辑器,它编辑文件或标准输入 导出的文件拷贝.标准输入可能是来自键盘.文件重定向.字符串或变量,或者是一个管道文 ...

  5. SHELL 在指定行的前/后插入指定内容

    #如果知道行号可以用下面的方法 sed -i '88 r b.file' a.file    #在a.txt的第88行插入文件b.txt awk '1;NR==88{system("cat ...

  6. [Linux] sed命令使用之在文件中快速删除/增加指定行

    1.删除文档的第一行 sed -i '1d' <file> 2.删除文档的最后一行sed -i '$d' <file> 3.在文档指定行中增加一行例如文档如下:echo &qu ...

  7. linux tail + head 查看指定行

    取出一段数据后,需要获取指定行 file # 前10行 file # 不要最后10行的前面所有行 file # 后10行 file # 不要前面10行的后面所有行 | # 不要前后10行剩余的所有行

  8. sed 删除最后几行 和删除指定行 awk使用

    sed 删除最后几行 和删除指定行   转载原文链接:http://blog.51cto.com/lspgyy/1305489 sed 想删除文件中的指定行,是可以用行号指定也可以用RE来匹配的. 删 ...

  9. shell,计算指定行的和,计算指定列的和

    有一个文本文件,里面某行某列为数字,那么如何用shell计算指定行(列)的和,方法如下 计算指定行的和: awk 'NR==3{for(i=1;i<=NF;i++)sum=sum+$i;}END ...

随机推荐

  1. sort方法和自定义比较器的写法

    摘要 在做一些算法题时常常会需要对数组.自定义对象.集合进行排序. 在java中对数组排序提供了Arrays.sort()方法,对集合排序提供Collections.sort()方法.对自定义对象排序 ...

  2. reactnative实现qq聊天消息气泡拖拽消失效果

    前言(可跳过) 我在开发自己的APP时遇到了一个类似于qq聊天消息气泡拖拽消息的需求,因为在网上没有找到相关的组件,所以自己动手实现了一下 需求:对聊天消息气泡拖拽到一定长度松开时该气泡会消失(可自行 ...

  3. Linux下文件的三种时间标记:访问时间、修改时间、状态改动时间 (转载)

    在windows下,一个文件有:创建时间.修改时间.访问时间. 而在Linux下,一个文件也有三种时间,分别是:访问时间.修改时间.状态改动时间. 两者有此不同,在Linux下没有创建时间的概念,也就 ...

  4. Relocations in generic ELF (EM: 40)

    最近在搞机器上的wifi热点,需要移植一大堆东西,如hostapd\wpa_suppliant.dhcp等,这些玩意又依赖其他的一大堆库的移植,比如libnl,openssl等,今天在移植编译libn ...

  5. STL 去重 unique

    一.unique函数 类属性算法unique的作用是从输入序列中"删除"所有相邻的重复元素. 该算法删除相邻的重复元素,然后重新排列输入范围内的元素,并且返回一个迭代器(容器的长度 ...

  6. 创建双向 CA x509 验证证书 kube-apiserver

    1. 设置 kube-apiserver 的 CA 证书相关的文件和启动参数 使用 OpenSSL 工具在 Master 服务器上创建 CA 证书和私钥相关的文件: # openssl genrsa ...

  7. prometheus(2)之对kubernetes的监控

    prometheus服务发现 1.基于endpoints的service注释服务自动发现. 2.基于pod注释的服务自动发现 3.基于consul注册的服务自动发现 4.手动配置服务发现 5.push ...

  8. 刷题日记-JZ25合并有序链表

    合并有序链表 递归方式合并链表pHead1,pHead2 base case是 pHead1为空或者pHead2为空 递归方式是 如果pHead1->val < pHead2->va ...

  9. 尖端之作看逐浪-Zoomla!逐浪CMS python版发布

    免费下载:https://www.z01.com/down/3723.shtml Python是跻身于当代IT世界最流行和代码最高效的编程语言之一. 带着对技术的卓越追求.对客户的承诺.对品质的极致追 ...

  10. php 数组(2)

    数组排序算法 冒泡排序,是一种计算机科学领域的较简单的排序算法.它重复地访问要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们减缓过来.走访数列的工作室重复的进行直到没有再需要交换,也就是说该 ...