文本三剑客其二

文本三剑客其二

sed和awk

grep就是查找文本当中的内容,扩展正则表达式。

sed 对文本内容进行增删改查

sed是一种流编辑器,一次处理一行内容。

如果只是展示,会放在缓冲区(模式空间),展示结束之后,会从模式空间把操作结果删除。

一行一行处理,处理完当前行,才会处理下一行。直到文件末尾。

sed的命令格式和操作选项:

sed -e '操作符' -e '操作符' 文件1 文件2

-e 表示可以跟多个操作符,只要有一个操作,-e可以省略。

sed -e '操作符1;操作符2' 文件1 文件2

选项:

-e:用于执行多个操作命令

-f:在脚本中定义好了操作符,然后根据脚本内容的操作符对文件进行操作

-i:直接修改目标文件(慎用)

-n:仅显示script处理后的结果(不加-n,sed会有两个输出结果,加了-n之后就会把默认输出屏蔽,只显示一个结果)

-r:扩展正则表达式

操作符:

p:打印结果

s:替换,替换字符串

c:替换,替换指定行

y:替换,替换单个字符,多个字符替换必须和替换内容的字符长度保持一致。

d:删除,删除行

a:增加,在指定行的下面一行插入内容

i:增加,在指定行的上面一行插入指定内容

=:标出行号

r:在行后增加文本内容

$a 在最后一行插入新的内容

$i 在最后一行上一行插入新的内容

$r 读取其他文件的内容,然后插入到对象文件的最后一行。

打印功能:

寻址打印

[root@localhost opt]# sed -n '=;p' test1.txt 
1
13770325194
2
13131301010
3
111111111111

打印最后一行

[root@localhost opt]# cat -n test1.txt | sed -n '$p' 
     9  root1rootroot

行号范围打印:

打印第二行到第六行

[root@localhost opt]# cat -n test1.txt | sed -n '2,6p'
     2  13131301010
     3  111111111111
     4  
     5  
     6  aaacvvaada

打印第二行和最后一行

[root@localhost opt]# cat -n test1.txt | sed -n '2p;$p'
     2  13131301010
     9  root1rootroot

打印奇数行

[root@localhost opt]# cat -n test1.txt | sed -n 'p;n'   #n的作用打印一行,跳过下一行
     1  13770325194
     3  111111111111
     5  
     7  root-root
     9  root1rootroot

打印偶数行

[root@localhost opt]# cat -n test1.txt | sed -n 'n;p'   #n的作用是跳过一行,打印下一行
     2  13131301010
     4  
     6  aaacvvaada
     8  root

如何对文本内容进行过滤

[root@localhost opt]# cat -n test1.txt | sed -n '/o/p'    #过滤并打印包含o的行       //之间是包含的要过滤的内容
     7  root-root
     8  root
     9  root1rootroot

使用正则表达式对文本内容进行过滤

[root@localhost opt]# sed -n '/^root/p'  /etc/passwd    #以root为开头
root:x:0:0:root:/root:/bin/bash
​
[root@localhost opt]# sed -n '/bash$/p'  /etc/passwd    #以bash为结尾
root:x:0:0:root:/root:/bin/bash
zhang:x:1000:1000:zhang:/home/zhang:/bin/bash
dn:x:1001:1001::/home/dn:/bin/bash
xy102:x:1002:1002::/home/xy102:/bin/bash

从指定行开始,打印到第一个bash为结尾的行

[root@localhost opt]# sed -n '42,/bash$/p'  /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
zhang:x:1000:1000:zhang:/home/zhang:/bin/bash
面试题1

如何免交互删除文本内容。不删除文件。

[root@localhost opt]# sed -i 'd'  test2.txt 
[root@localhost opt]# cat test2.txt

或者

[root@localhost opt]# cat /dev/null > test2.txt
[root@localhost opt]# cat test2.txt

sed 的删除操作

[root@localhost opt]# sed -in '1,3d;p' test2.txt
4
5
6
7
8

匹配字符串删除行

[root@localhost opt]# sed -n '/1/,/5/d;p' test2.txt
6
7
8
面试题2:

如何免交换的方式删除空行

sed的方式

[root@localhost opt]# sed  '/^$/d' test1.txt 
13770325194
13131301010
111111111111
aaacvvaada
root-root
root
root1rootroot

grep

[root@localhost opt]# grep -v "^$" test1.txt 
13770325194
13131301010
111111111111
aaacvvaada
root-root
root
root1rootroot

cat

[root@localhost opt]# cat test1.txt | tr -s "\n"
13770325194
13131301010
111111111111
aaacvvaada
root-root
root
root1rootroot

sed的替换

s替换字符串:

[root@localhost opt]# sed -n 's/root/test/gp' /etc/passwd       #g是替换所有,g换成数字几就替换每行第几个
test:x:0:0:test:/test:/bin/bash
operator:x:11:0:operator:/test:/sbin/nologin
[root@localhost opt]# sed -n '4,6 s/^/#/p' test1.txt    #注释4-6行
[root@localhost opt]# sed -n -e '4s/^/#/p' -e '6s/^/#/p' test1.txt      #注释4和6行

首字母变成大写

[root@localhost opt]# sed  's/[a-z]/\u&/' test1.txt 
13770325194
13131301010
111111111111
Aaacvvaada
Root-root
Root
Root1rootroot
#u& 是转换首字母大写的特殊符号,\转义符

将单词的字母全部变为大写

[root@localhost opt]# sed  's/[a-z]/\u&/g' test1.txt 
13770325194
13131301010
111111111111
AAACVVAADA
ROOT-ROOT
ROOT
ROOT1ROOTROOT

将大写转换为小写

[root@localhost opt]# sed  's/[A-Z]/\l&/' test3.txt 
aAA
bBB
cCC
dDD
#l&把大写转换成小写的特殊字符,\转义符
[root@localhost opt]# sed  's/[A-Z]/\l&/g' test3.txt 
aaa
bbb
ccc
ddd
#g是将单词的所有字母大写转换为小写

c 整行替换

[root@localhost opt]# sed '/IPADDR=192.168.60.20/c IPADDR=192.168.60.100' /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.60.100
NETMASK=255.255.255.0
GATEWAY=192.168.60.2
DNS1=218.2.135.1
DNS2=221.131.143.69

y 单个字符替换

[root@localhost opt]# sed 'y/abc/123/' test3.txt 
AAA
BBB
CCC
DDD
123

增加

a 在指定行下插入

[root@localhost opt]# sed '/AAA/a zhang' test3.txt 
AAA
zhang
BBB
CCC
DDD
abc
ABD

i 在指定行上一行插入新的内容

[root@localhost opt]# sed '/AAA/i zhang' test3.txt 
zhang
AAA
BBB
CCC
DDD
abc
ABD

r:在行后增加文本内容

[root@localhost opt]# sed '/BBB/r test4.txt' test3.txt 
AAA
BBB
zxc
CCC
DDD
abc
ABD

$a 在最后一行插入新的内容

[root@localhost opt]# sed '$a shuai dn' test3.txt 
AAA
BBB
CCC
DDD
abc
ABD
shuai dn

$i 在最后一行上一行插入新的内容

[root@localhost opt]# sed '$i shuai dn' test3.txt 
AAA
BBB
CCC
DDD
abc
shuai dn
ABD

$r 读取其他文件的内容,然后插入到对象文件的最后一行。

[root@localhost opt]# sed '$r test4.txt' test3.txt 
AAA
BBB
CCC
DDD
abc
ABD
zxc

使用sed命令对字符串和字符的位置进行互换

[root@localhost opt]# echo chengqianshuai | sed -r 's/(cheng)(qian)(shuai)/\3\1\2/'
shuaichengqian
[root@localhost opt]# echo 成乾真的帅 | sed -r 's/(.)(.)(.)(.)(.)/\5\4\3\2\1/'
帅的真乾成

面试题3:
ant-1.9.7.jar
ant-launcher-1.9.7.jar
antlr-2.7.7.jar
antlr-runtime-3.4.jar
aopalliance-1.0.jar
archaius-core-0.7.6.jar
asm-5.0.4.jar
aspectjweaver-1.9.5.jar
bcpkix-jdk15on-1.64.jar
bcprov-jdk15-1.46.jar
bcprov-jdk15on-1.64.jar
checker-compat-qual-2.5.5.jar

将版本号显示出来

grep

[root@localhost opt]# cat -n 456.txt | grep -E "\b[0-9][.][0-9][.][0-9]\b|\b[0-9][.][0-9]+\b"

sed

[root@localhost opt]# cat 456.txt | sed -r 's/(.*)-(.*)(\.jar)/\2/'
1.9.7
1.9.7
2.7.7
3.4
1.0
0.7.6
5.0.4
1.9.5
1.64
1.46
1.64
2.5.5

面试题4

打印指定时间内的日志

[root@localhost opt]# cat /var/log/messages | sed -r -n '/Jun 21 12:00:01/,/Jun 21 13:00:01/p'
Jun 21 12:00:01 localhost systemd: Created slice User Slice of root.
Jun 21 12:00:02 localhost systemd: Started Session 255 of user root.
Jun 21 12:00:02 localhost systemd: Removed slice User Slice of root.
Jun 21 12:01:01 localhost systemd: Created slice User Slice of root.
Jun 21 12:01:01 localhost systemd: Started Session 256 of user root.
Jun 21 12:01:01 localhost systemd: Removed slice User Slice of root.
Jun 21 12:10:01 localhost systemd: Created slice User Slice of root.
Jun 21 12:10:01 localhost systemd: Started Session 257 of user root.
Jun 21 12:10:01 localhost systemd: Removed slice User Slice of root.
Jun 21 12:20:01 localhost systemd: Created slice User Slice of root.
Jun 21 12:20:01 localhost systemd: Started Session 258 of user root.
Jun 21 12:20:01 localhost systemd: Removed slice User Slice of root.
Jun 21 12:30:01 localhost systemd: Created slice User Slice of root.
Jun 21 12:30:01 localhost systemd: Started Session 259 of user root.
Jun 21 12:30:01 localhost systemd: Removed slice User Slice of root.
Jun 21 12:40:01 localhost systemd: Created slice User Slice of root.
Jun 21 12:40:01 localhost systemd: Started Session 260 of user root.
Jun 21 12:40:01 localhost systemd: Removed slice User Slice of root.
Jun 21 12:50:01 localhost systemd: Created slice User Slice of root.
Jun 21 12:50:01 localhost systemd: Started Session 261 of user root.
Jun 21 12:50:01 localhost systemd: Removed slice User Slice of root.
Jun 21 13:00:01 localhost systemd: Created slice User Slice of root.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/730116.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3自动导入---组件库elements-ui,vuetify以及scss样式的自动导入

自动导入 我们在使用第三方组件库和css样式文件时,都需要进行引入,可以在单个组件内单独引用,也可以在全局引入或一次引入所有组件;但是,一般情况下我们都不会全部引入,这会是打包的结果变大,而…

idea插件开发之如何获取用户输入的变量名(类变量,局部变量等)

写在前面 比如我们要开发一个变量名称补全功能的插件,此时就需要在用户输入时获取当前的最新输入内容,本文就来看下如何来做。 1:开发 首先我们需要创建一个CompletionContributor的子类,还需要一个CompletionProvider的子类来…

【权威发布】2024年环境科学、旅游与产业经济国际会议(ICESTIE 2024)

2024年环境科学、旅游与产业经济国际会议 2024 International Conference on Environmental Science, Tourism and Industrial Economics 会议简介 2024年环境科学、旅游与产业经济国际会议旨在汇聚全球该领域的专家学者,共同探讨环境科学与旅游产业的融合发展&…

ArcGIS图斑分区(组)排序—从上到下从左到右

​​ 点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 ArcGIS图斑分区(组)从上到下从左到右排序 是之前的内容的升级 GIS技巧100例——12ArcGIS图斑空间排序 关于今天的内容 我们在19年已经和大家分…

vue3 中实现 验证码发送 刷新不变倒计时

今天实现一个倒计时的功能 在平常开发前端的功能的时候 不管是 移动端还是web端 我们都会有注册 登录 中的发送验证码功能 实现绑定以及注册功能。今天我主要分享一下当前的验证码实现原理。 有两种做法(我目前认为以及看到的) ① 做一个简单的倒计时 ② 实时监测倒计时 刷…

食品行业BC一体化运营方案

一、引言 在当前的市场环境下,食品行业面临着日益激烈的竞争和不断变化的消费者需求。传统的经营模式已无法满足现代消费者对高效、便捷和个性化服务的要求。因此,实施BC(Business to Consumer)一体化运营方案成为必然选择。通过…

顶顶通呼叫中心中间件-替换授权文件使授权文件生效指南

一、登录my.ddrj.com下载授权文件 登录地址:用户-顶顶通授权管理系统 登录之后正式授权然后点击查看把license.json下载下来,然后替换到fs的授权文件路径,默认路径是:/ddt/fs/conf 如果安装路径不一样就需要自己去看看授权文件存…

分流电阻器的原理、特性、参数要点及其与分压电阻的区别详解

分流电阻器是一种低阻值电阻器,设计用于在电路中并联连接,以提供一个低阻抗的旁路或分流路径,从而使得一部分电流可以通过这个路径流动。它的主要功能是测量或限制电流,尤其适用于大电流检测的应用场景。分流电阻通过在其两端产生…

windows下cmd命令行模式中cd变换路径命令无效的解决办法

一,出现的情况 二,解决方法 当出现转换盘的时候打开 cmd 之后可能是无法生效的 ,因为在cmd 中转换盘首先需要用到换盘符 。 Solve1 : 先进行换盘 C: c: // 转换到 C盘 D: d: // 转化到 D盘 Solve2 : 直接进行强转 cd /dE:\ACM算法资源\XCP…

如何使用mvnd,随着mvnd的1.0.0发布,Maven构建速度提升了3倍不止。

maven-mvnd-1.0.0-m8-m40-windows-amd64 1、什么是 Mvnd呢 Mvnd 是 Apache Maven Daemon 的简称,是一个通过 GraalVM 构建的本地可执行文件,用于加速 Maven 构建。Mvnd 的设计理念是通过在后台运行一个守护进程来避免每次构建时启动新的 JVM&#xff0c…

【人机交互 复习】第7章 可视化设计

一、窗口界面类型 1.多文档界面 (1)优点 a.节省系统资源 b.最小的可视集 c.协同工作区 d.多文档同时可视化 (2)缺点 a.菜单随活动文档窗口状态变化,导致不一致性 b.文档窗口必须在主窗口内部,减弱多文档显…

易支付宝塔一键部署项目 懒人专用包 制作

宝塔一键部署说明 https://www.bt.cn/bbs/thread-33063-1-1.html 1. auto_install.json {"php_ext":"fileinfo","chmod":[],"success_url":"install/?step3&jump1","php_versions":"80","db…

mybatis查询PostgreSQL报错:无法确定参数 $1 的数据类型

错误信息 ### Cause: org.postgresql.util.PSQLException: 错误: 无法确定参数 $1 的数据类型 ; bad SQL grammar []; nested exception is org.postgresql.util.PSQLException: 错误: 无法确定参数 $1 的数据类型] with root cause org.postgresql.util.PSQLException: 错误: …

Python3,10行代码,从数据库获取各个维度的数据统计,并把结果输出在Excel中。

10行代码自动统计数据 1、引言2、代码实例3、总结 1、引言 小屌丝:鱼哥帮个忙 小鱼:稍等会哦, 小屌丝:好嘞。 小屌丝: 鱼哥, 还没忙完嘛? 小鱼:快了快了, 再耐心等一等…

缓存雪崩(主从复制、哨兵模式(脑裂)、分片集群)

缓存雪崩: 在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。 方法一: 给不同key的TTL添加随机值,以此避免同一时间大量key失效。(用于解决同一时间大量key过期&…

重学java 81.类的加载时机

不破不立,人类最宝贝的品质就是勇敢和过去告别 —— 24.6.21 一、类的加载时机 1.new对象 2.new子类对象(new子类对象先初始化父类) 3.执行main方法 4.调用静态成员 5.反射,创建Class对象 这五种情况就可以让类加载到内存 类加载过程 1.问题:谁将class文件加载到了…

智能血压计,让健康“听”得见- WT588F02B血压计语音方案

一、语音血压计开发背景: 在快节奏的现代生活中,健康成为了我们最宝贵的财富。而血压,作为反映人体健康状态的重要指标之一,更是需要我们时刻关注。传统的血压计虽然能够为我们提供准确的血压数据,但往往因为操作复杂…

nodejs从基础到实战学习笔记-模块化、包

二、模块化 2.1 什么是模块化 模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。 2.1.1 把代码进行模块化拆分的好处 提高了代码的复用性提高了代码的可维护性可以实现按需…

云计算【第一阶段(18)】磁盘管理与文件系统

一、磁盘基础 磁盘(disk)是指利用磁记录技术存储数据的存储器。 磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。 早期计算机使用的磁盘是软磁盘(Floppy Disk,简称…

人工智能在气象预报领域的崛起:GraphCast引领新纪元

最近,谷歌推出的天气预测大模型GraphCast在全球范围内引起了广泛关注,其卓越的表现不仅刷新了人们对AI能力的认知,更预示着传统天气预报工作模式的深刻变革。 GraphCast是一款基于机器学习技术的天气预测工具,它通过深度学习和大数…