Shell 指定行处理head、tail、sed

sed 文件 编程技术
发布日期 2023-08-25 更新日期 2023-08-25 阅读次数 156 文章字数 3.4k

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行开始显示到结尾
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

文章作者: 朱丰华

文章链接: https://smart.52dixiaowo.com/blog/post-480.html

版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。

sed 文件

发表评论

相关推荐
朱丰华   |   7个月前   |   git

git从缓存中移除数据git rm --cached

408    评论    点赞
朱丰华   |   1年前   |   linux · upx

Linux下安装UPX

406    评论    点赞
朱丰华   |   1年前   |   请求 · 一个

ab测压命令,apache测压工具

172    评论    点赞
朱丰华   |   1年前   |   php · 缓存 · opcache

php 加速、提高并发opcache

198    评论    点赞
朱丰华   |   1年前   |   go · gopath

Go自定义包并安装(GOPATH)

117    评论    点赞
朱丰华   |   1年前   |   变量 · mysql · sql · 用户

MySQL用户自定义变量

95    评论    点赞
朱丰华   |   1年前   |   sql · php

PHP如何使用PDO批量执行SQL?

115    评论    点赞
朱丰华   |   1年前   |   linux · 内容

linux环境下,对于一个大文件,如何查看其中某行的内容

68    评论    点赞
朱丰华   |   1年前   |   linux · 文件 · 行数

linux 取得文件行数

50    评论    点赞
朱丰华   |   1年前   |   下载 · 请求

idm、浏览器下载发送两次下载请求

137    评论    点赞
朱丰华   |   1年前   |   文件 · linux · 修改

linux文件的三个时间atime,mtime,ctime分别表示什么?

275    评论    点赞
朱丰华   |   1年前   |   linux · 文件 · 统计

linux递归统计文件夹下的文件数量

166    评论    点赞
朱丰华   |   1年前   |   linux · 文件

linux递归统计文件夹大小、du命令_Linux du命令:查看文件夹和文件的磁盘占用情况

193    评论    点赞
朱丰华   |   1年前   |   git · add · 文件

git add -A 和 git add . 的区别

113    评论    点赞
朱丰华   |   1年前   |   php

windows下编写、编译php扩展

158    评论    点赞
朱丰华   |   1年前   |   linux · php

linux下编写、编译php扩展

150    评论    点赞
朱丰华   |   1年前   |   html

npm clean-mark,抓取网页文章内容,转换成markdown、html、txt

192    评论    点赞
朱丰华   |   1年前   |   js · export · import

js es6 export,import,export default的用法和区别

124    评论    点赞
朱丰华   |   1年前   |   javascript · js · obfuscator · 混淆

javascript-obfuscator混淆js文件

52    评论    点赞
朱丰华   |   1年前   |   js · vue · npm · 安装

npm快速上手

99    评论    点赞
{{item.author_name}}   |   {{new Date(item.date*1000).log()}}   |   {{it}} ·

{{item.title}}

{{item.uv}}    评论    点赞