//说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)相关推荐

  1. Shell编程(三)grep sed awk文本处理三剑客

    上一章: Shell编程(二)_做测试的喵酱的博客-CSDN博客 一.ps命令 指令: ps 作用: 主要是查看服务器的进程信息 选项含义: -e:等价于 '-A' ,表示列出全部的进程 -f:显示全 ...

  2. grafana高可用和Alerting(七)

    http://www.51niux.com/?id=247 一.grafana版本升级 1.1  还是先跟着官网简单走一波 建议经常升级Grafana,以获取最新的修补程序和增强功能. 为了实现这一点 ...

  3. 《构建高可用Linux服务器 第3版》—— 1.4 Linux服务器的日志管理

    本节书摘来自华章出版社<构建高可用Linux服务器 第3版>一 书中的第1章,第1.4节,作者:余洪春 ,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.4 ...

  4. linux grep sed awk

    linux 文本编辑命令grep sed awk(转)     grep grep (global search regular expression(RE) and print out the li ...

  5. linux三剑客及正则表达(grep,sed,awk)

    首先我们现在知道Linux下一切皆文件,对Linux的操作就是对文件的处理,那么怎么能更好的处理文件呢?这就要用到我们上面的三剑客命令. 在说这三个命令前我们要插入一个小插曲就是"正则表达式 ...

  6. MySQL 高可用架构 之 MHA (Centos 7.5 MySQL 5.7.18 MHA 0.58)

    目录 简介 环境准备 秘钥互信 安装基础依赖包 安装MHA组件 安装 MHA Node组件 安装 MHA Manager 组件 建立 MySQL 一主三从 初始化 MySQL 启动MySQL 并简单配 ...

  7. Ansible搭建hadoop3.1.3高可用集群

    一.节点信息 内核版本:3.10.0-1062.el7.x86_64 系统版本:Red Hat Enterprise Linux Server release 7.7 (Maipo) 节点 ip 内存 ...

  8. DRBD 高可用配置详解(转)

    高可用性集群解释: 一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上.还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行. 今天来做个Heartbe ...

  9. Keeplived配置Nginx双机高可用【转】

    原文:http://bbs.51cto.com/thread-1021620-1.html 一.简介 不管是Keepalived还是Heartbeat做高可用,其高可用,都是站在服务器脚本去说的高可用 ...

最新文章

  1. halcon的仿射变换算子的介绍
  2. Windows 10每天定时执行脚本
  3. python人工智能——机器学习——分类算法-k近邻算法
  4. Java常用类(2)--日期时间相关类Date、Calendar、LocalDateTime、Instant全面
  5. 神州泰岳2050万元收买并增资奇点国际
  6. DCT(离散余弦变换(DiscreteCosineTransform))
  7. 现代程序设计 作业4
  8. spark源码分析之Executor启动与任务提交篇
  9. web开发——Flask框架
  10. 【版本控制管理】 深入 001 A successful Git branching model GIT 项目分支策略和释放管理
  11. Genius‘s Gambit【学习进度条1】
  12. 天勤数据结构代码——双链表
  13. CImage 从内存中读取图像
  14. android re浏览器下载,re浏览器官方版下载_re浏览器app下载4.9.6 - 系统城
  15. 网易云音乐8.0版本背后的野心
  16. 重庆GDP超过了广州,纯属正常?
  17. 全球37%手机或因芯片漏洞遭攻击、黑客利用微软漏洞窃取登录凭据|11月25日全球网络安全热点
  18. 合同管理数据库设计mysql_工程合同管理信息系统的数据设计理念
  19. Python 的文件定位
  20. 掌上题库V1.2.2全开源版本

热门文章

  1. 传感器的五种感觉:第一部分:嗅觉、味觉和听觉
  2. 交互电子沙盘虚拟数字沙盘开发教程第2课
  3. 每隔一段时间执行shell命令
  4. 中集集团全球港航人工智能独角兽中集飞瞳,全球最先进港航人工智能AI核心技术及工业级产品,新一代人工智能港口智能化船公司智能化方案
  5. 年薪达不到23.5万全额退款 | 人工智能核心能力培养计划
  6. 安溪二中高考2021成绩查询,2021年安溪县高考状元名单资料,今年安溪县高考状元多少分...
  7. Chrome 开启深色模式(Force Dark Mode for Web Contents)
  8. Python绘制饼状图/甜甜圈
  9. python定义一个复数类_Python中complex复数类型的简单介绍
  10. 新算法可对细胞间交流进行建模