高可用文本处理-(sed,awk)
//说sed/awk之前先说以下shell脚本颜色,虽然花里胡哨,但是你的脚本从此有了灵魂
1.shell脚本颜色
-e:启动反斜杠转义的解释
31对应红色
32对应绿色
33对应黄色
34对应蓝色
35对应紫色0m:显示高亮文本
1m:显示后短期不结束
4m下划线
2.sed行编辑器
2.1行编辑器(Stream EDitor)
sed是一种流编辑器,一次处理一行内容,处理中把当前处理的行存储在临时缓冲区中,被称为模式空间(spttern space),接着用sed命令处理缓冲区中的内容,处理完成后,缓冲区的内容发送屏幕,然后读入下行,执行下一行
参数用法:
-e:多编辑模式-f:指定文件中读取编辑脚本-r |-E:支持扩展正则表达式-p:打印匹配的内容,这将导致输出的重复,除非默认更上-n选项限制,(用用于改变流控制)-i:备份文件原处编辑s:替换 //后面加上i会忽略大小写 //后面加上g会匹配所有要匹配的内容; //分隔符 可以同时操作多个内容修改-e -e //一个sed可以同时使用多个-e功能sed ’ //‘符号的使用操作多个,优点清晰s///s///
2.2 d删除的使用(以下均没-i,显示模式空间的内容)
[root@8-4 ~]# cat list
a
ab
abc
abcd
[root@8-4 ~]# sed '/^a$/d' list #只匹配删除一个字符
ab
abc
abcd
[root@8-4 ~]# sed '/abcd/d' list #删除匹配的内容
a
ab
abc#文本方式,同时删除俩行内容
[root@8-4 ~]# cat list
a
ab
abc
a
[root@8-4 ~]# cat test
/^a$/d;/abcd/d
[root@8-4 ~]# sed -f test list
ab
abc
2.3 -p -n搭配使用
#打印第3行的内容,并且输入到txt里面
[root@8-4 ~]# cat list
a
ab
abc
abcd
[root@8-4 ~]# sed -n '3p' list
abc
[root@8-4 ~]# sed -n '3p' list > txt
[root@8-4 ~]# cat txt
abc#打印1-10的偶数与基数
[root@8-4 ~]# seq 1 10 |sed -n '1~2p'
1
3
5
7
9
[root@8-4 ~]# seq 1 10 |sed -n '2~2p'
2
4
6
8
10
2.4 s替换的使用
要求:第五行的root内容替换成roots
[root@8-4 ~]# cat list
root
tom
lisi
redhat
root
[root@8-4 ~]# sed '5 s/root/roots/' list
root
tom
lisi
redhat
roots要求:忽略大小写的替换
[root@8-4 ~]# cat -n list1 root2 tom3 lisi4 redhat5 Root
[root@8-4 ~]# sed '5 s/root/roots/i' list
root
tom
lisi
redhat
roots要求:将所有root替换成roots,不能成为rootss是错误的
[root@8-4 ~]# cat list
root
tom
lisi
redhat
Root
roots
[root@8-4 ~]# cat list
root
tom
lisi
redhat
Root
roots
[root@8-4 ~]# sed -r 's/\<root\>/roots/i' list
roots #使用正则表达式
tom
lisi
redhat
roots
roots
2.5错误用法:
sed ‘s/a/b’ list
纠正:‘///’ 必须要有三个/ 如sed ‘s/a/b/’ list
3.sed的更多语法
注释#
修饰替换的标志flags
g:全局模式更改
p:打印模式空间的内容
W file :前面执行的内容存放在另一个文件
& :正则表达式匹配的内容
a:在某行增加一行内容
i:插入内容
n:当前行被标准输入,读取的下一行到模式空间,新行成为当前行的递增器
N:将下一行输入到模式空间之后,新添加的行与模式空间当前的内容用换行符分隔,(常用于俩行的内容),实现多行匹配的内容
3.1y的使用
sed 'y/abc/jkl/' list #只能修改对于abc的3个字母,a修改为j b修改为k c修改l
3.2a/i插入的使用(均没有-i,只显示模式空间的内容,加上-i即可生效)
#在第六行的后面增加一行内容
[root@8-4 ~]# cat -n list1 a2 ab3 abc4 abc5 abcd6 oppo
[root@8-4 ~]# sed '6avovi' list
a
ab
abc
abc
abcdoppo
vovi#在第六行的前面增加一行内容
[root@8-4 ~]# cat -n list1 a2 ab3 abc4 abc5 abcd6 oppo
[root@8-4 ~]# sed '6ivovi' list
a
ab
abc
abc
abcd
vovioppo
3.3(N的使用)不同的行内容显示为一行内容
#案例一:
[root@8-4 ~]# cat list
hell
o world
[root@8-4 ~]# sed '/hell/N;s/\n//' list
hello world#案例二:
[root@8-4 ~]# cat list
hello worl
d to
m
[root@8-4 ~]# sed '/worl/{N;s/\n//;N;s/\n//}' list
hello world tom
4.sed高级用法
-i.x # x代表任意一个文件,最常用的选项,在修改文本内容之前把该内容先备份成一个文件,再进行修改
d :删除匹配的一行
模式空间|保持空间:是一个预处理空间,所以相应操作的输出会在保持空间进行显示
多行模式空间:模式匹配是面向行的
命令 缩写 功能Hold h或H 将模式空间的内容复制或追加到保持空间Get g或G 将保持空间的内容复制或追加到模式空间Exchange x 交换保持空间和模式空间的内容
以上的命令操作是基于模式空间内操作的
4.1备份操作
[root@8-4 ~]# cat list
a
abc
abcd
[root@8-4 ~]# sed -i.back '2d' list
[root@8-4 ~]# cat list
a
abcd #删除第二行的内容
[root@8-4 ~]# cat list.back
a
abc
abcd #备份的内容
4.2要求:替换3行相应单词,换成大写
[root@sed ~]# cat list #文本内容
find the match statement uagidvbiyhavwi
abcde the tom statement uagidvbiyhavwi
abcde the jerry statement uagidvbiyhavwi
[root@sed ~]# cat sedscript #脚本进行相应的操作
/the .* statement/{ #依次匹配到3行的全部内容
h #依次复制或追加到保持空间
s/.*the (.*) statement.*/\1/ } #匹配到(.*)的内容,(.*)就是Match tom jerry,替换成\1
[root@sed ~]# sed -rf sedscript list #带上-r扩展正则表达式的参数查看
Match
tom
jerry
---------------------------------------------------------------------
#基于以上,再将3行内容换成大写
[root@sed ~]# cat sedscript
/the .* statement/{
h
s/.*the (.*) statement.*/\1/
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ #所以的字母全部换成大写
}
[root@sed ~]# sed -rf sedscript list
MATCH
TOM
JERRY
--------------------------------------------------------------------
再基于以上,将保持空间的内容全部复制到模式空间,调换位置即可
root@sed ~]# cat sedscript
/the .* statement/{
h
s/.*the (.*) statement.*/\1/
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
G
s/(.*)\n(.*the) .*(statement)/\2 \1 \3/
}
[root@sed ~]# sed -rf sedscript list
find the MATCH statement uagidvbiyhavwi
abcde the TOM statement uagidvbiyhavwi
abcde the JERRY statement uagidvbiyhavwi #以上均是呈现的模式空间的效果
---------------------
最后一步呈现效果,大功告成
[root@sed ~]# sed -i -r -f sedscript list
[root@sed ~]# cat list
find the MATCH statement uagidvbiyhavwi
abcde the TOM statement uagidvbiyhavwi
abcde the JERRY statement uagidvbiyhavwi
4.3流控制命令
b mylabel #跳转 如//b/ end
:x #定义标签 如:end
b:无条件的转移到脚本其它位置
t:有条件的转移到其它位置
要求升级:文本文件中的 match,jerry需要大写 tom为小写
find the match statement uagidvbiyhavwi
abcde the tom statement uagidvbiyhavwi
abcde the jerry statement uagidvbiyhavwi#很简单,加一个控制流程即可
[root@sed ~]# cat sedscript
/tom/{ #匹配到tom,直接跳到end标签,不进行下面相应的操作
b end
}
/the .* statement/{
h
s/.*the (.*) statement.*/\1/
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
G
s/(.*)\n(.*the) .*(statement)/\2 \1 \3/
}
:end #end标签
[root@sed ~]# sed -rf sedscript list
find the MATCH statement uagidvbiyhavwi
abcde the tom statement uagidvbiyhavwi
abcde the JERRY statement uagidvbiyhavwi
5.awk
awk:行编辑器
语法:awk ‘[BEGIN]{}{}[END]{}’
转义键:
\b:退格键
\r:回车键
\ddd:1-3位二进制
\xbex:16位进制
-v:传变量
NR:行
FS:字段分隔符
RS:行分隔符
5.1awk简单用法
打印列的内容
print $n :对应着列
[root@8-4 ~]# cat test
hello world
hello rhcsa
hello rhce
hello rhca
[root@8-4 ~]# awk '{print $1}' test
hello
hello
hello
hello
[root@8-4 ~]# awk '{print $2}' test
world
rhcsa
rhce
rhca
打印行的内容
NR==number
[root@8-4 ~]# cat test
hello world
hello rhcsa
hello rhce
hello rhca
[root@8-4 ~]# awk 'NR==1' test
hello world
[root@8-4 ~]# awk 'NR==2' test
hello rhcsa
打印行且列的内容
[root@8-4 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 452M 0 452M 0% /dev
tmpfs 472M 0 472M 0% /dev/shm
tmpfs 472M 19M 454M 4% /run
tmpfs 472M 0 472M 0% /sys/fs/cgroup
/dev/mapper/cs_8--4-root 17G 5.2G 12G 31% /
/dev/sda1 1014M 182M 833M 18% /boot
tmpfs 95M 0 95M 0% /run/user/0
[root@8-4 ~]# df -h |awk 'NR==2{print $2}'
452M
输出文本内容
\n:转换
\t:tab键
[root@8-4 ~]# echo |awk 'BEGIN{print "name""\t""age""\n""tom""\t""15""\n""rhce""\t""20"}'
name age
tom 15
rhce 20
测试整数字母空格
[root@8-4 ~]# cat awktest
/[0-9]+/{print "这是一个数字"}
/[a-zA-Z]+/{print "这个是一个字母"}
/^$/{print "这是一个空格"}
[root@8-4 ~]# awk -f awktest
9
这是一个数字
s
这个是一个字母这是一个空格
5.2awk脚本格式
#!/usr/bin/awk
5.3awk运算
[root@sed ~]# echo "a b c d"|awk 'BEGIN{one=0;two=4}{print $(one+two)}'
d #a对应$1,d对应$4
[root@sed ~]# echo |awk 'BEGIN{print 0.2/10}'
0.02
5.4awk取主机ip地址
[root@8-4 ~]# ip a |grep 'inet '|grep -v '127.0.0.1'|awk -F'[ /]+' '{print $3}'
192.168.136.233
5.5awk匹配练习
#list文本内容
707-724-0000
(707) 724-0000
(707)724-0000
1-707-724-0000
1 707-724-0000
1(707)724-0000#要求打印707-724-0000
[root@localhost ~]# awk '/^7[0-9]+-[0-9]+/' list
707-724-0000
#匹配俩行(707)的内容
[root@localhost ~]# awk '/^\([0-9]+\)/' list
(707) 724-0000
(707)724-0000
5.5小商品练习
-v:传递变量参数
#代码
[root@localhost ~]# cat list
oppo 3699
vovi 3599
iphone13 5699
huaweip50 6488
[root@localhost ~]# cat scripts.sh
#!/bin/bash
echo ------------------------京东商城----------------------------------------------
echo "手机商品列表:"
awk '{print NR"." $1,$2"¥"}' list
echo ------------------------------------------------------------------------------
read -p "输入想购买的商品号:" choice
read -p "输入购买的台数:" numawk -vcount=$num -vline=$choice 'NR==line{print "您购买了"count"台"$1,"共消费"$2*count"元" }' list
echo --------------------- -欢迎下次光临-------------------------------------------#脚本运行
[root@localhost ~]# source scripts.sh
------------------------京东商城----------------------------------------------
手机商品列表:
1.oppo 3699¥
2.vovi 3599¥
3.iphone13 5699¥
4.huaweip50 6488¥
------------------------------------------------------------------------------
输入想购买的商品号:3
输入购买的台数:1
您购买了1台iphone13 共消费5699元
--------------------- -欢迎下次光临-------------------------------------------
高可用文本处理-(sed,awk)相关推荐
- Shell编程(三)grep sed awk文本处理三剑客
上一章: Shell编程(二)_做测试的喵酱的博客-CSDN博客 一.ps命令 指令: ps 作用: 主要是查看服务器的进程信息 选项含义: -e:等价于 '-A' ,表示列出全部的进程 -f:显示全 ...
- grafana高可用和Alerting(七)
http://www.51niux.com/?id=247 一.grafana版本升级 1.1 还是先跟着官网简单走一波 建议经常升级Grafana,以获取最新的修补程序和增强功能. 为了实现这一点 ...
- 《构建高可用Linux服务器 第3版》—— 1.4 Linux服务器的日志管理
本节书摘来自华章出版社<构建高可用Linux服务器 第3版>一 书中的第1章,第1.4节,作者:余洪春 ,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.4 ...
- linux grep sed awk
linux 文本编辑命令grep sed awk(转) grep grep (global search regular expression(RE) and print out the li ...
- linux三剑客及正则表达(grep,sed,awk)
首先我们现在知道Linux下一切皆文件,对Linux的操作就是对文件的处理,那么怎么能更好的处理文件呢?这就要用到我们上面的三剑客命令. 在说这三个命令前我们要插入一个小插曲就是"正则表达式 ...
- MySQL 高可用架构 之 MHA (Centos 7.5 MySQL 5.7.18 MHA 0.58)
目录 简介 环境准备 秘钥互信 安装基础依赖包 安装MHA组件 安装 MHA Node组件 安装 MHA Manager 组件 建立 MySQL 一主三从 初始化 MySQL 启动MySQL 并简单配 ...
- Ansible搭建hadoop3.1.3高可用集群
一.节点信息 内核版本:3.10.0-1062.el7.x86_64 系统版本:Red Hat Enterprise Linux Server release 7.7 (Maipo) 节点 ip 内存 ...
- DRBD 高可用配置详解(转)
高可用性集群解释: 一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上.还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行. 今天来做个Heartbe ...
- Keeplived配置Nginx双机高可用【转】
原文:http://bbs.51cto.com/thread-1021620-1.html 一.简介 不管是Keepalived还是Heartbeat做高可用,其高可用,都是站在服务器脚本去说的高可用 ...
最新文章
- halcon的仿射变换算子的介绍
- Windows 10每天定时执行脚本
- python人工智能——机器学习——分类算法-k近邻算法
- Java常用类(2)--日期时间相关类Date、Calendar、LocalDateTime、Instant全面
- 神州泰岳2050万元收买并增资奇点国际
- DCT(离散余弦变换(DiscreteCosineTransform))
- 现代程序设计 作业4
- spark源码分析之Executor启动与任务提交篇
- web开发——Flask框架
- 【版本控制管理】 深入 001 A successful Git branching model GIT 项目分支策略和释放管理
- Genius‘s Gambit【学习进度条1】
- 天勤数据结构代码——双链表
- CImage 从内存中读取图像
- android re浏览器下载,re浏览器官方版下载_re浏览器app下载4.9.6 - 系统城
- 网易云音乐8.0版本背后的野心
- 重庆GDP超过了广州,纯属正常?
- 全球37%手机或因芯片漏洞遭攻击、黑客利用微软漏洞窃取登录凭据|11月25日全球网络安全热点
- 合同管理数据库设计mysql_工程合同管理信息系统的数据设计理念
- Python 的文件定位
- 掌上题库V1.2.2全开源版本
热门文章
- 传感器的五种感觉:第一部分:嗅觉、味觉和听觉
- 交互电子沙盘虚拟数字沙盘开发教程第2课
- 每隔一段时间执行shell命令
- 中集集团全球港航人工智能独角兽中集飞瞳,全球最先进港航人工智能AI核心技术及工业级产品,新一代人工智能港口智能化船公司智能化方案
- 年薪达不到23.5万全额退款 | 人工智能核心能力培养计划
- 安溪二中高考2021成绩查询,2021年安溪县高考状元名单资料,今年安溪县高考状元多少分...
- Chrome 开启深色模式(Force Dark Mode for Web Contents)
- Python绘制饼状图/甜甜圈
- python定义一个复数类_Python中complex复数类型的简单介绍
- 新算法可对细胞间交流进行建模