目录

1.sed

2.awk

1.sed

//sed命令
#语法说明:命令 参数 条件+处理= (指令) 处理文件信息
字符流编辑工具(行编辑工具)==按照每行中的字符进行处理操作
). 擅长对行进行操作处理
). 擅长将文件的内容信息进行修改调整/删除
). 指令信息
p print 输出信息
i insert 插入信息,在指定信息前面插入新的信息
a append 附加信息,在指定信息后面附加新的信息
d delete 删除指定信息
s substitute 替换信息 s###g(全局替换)
c 替换修改指定的一整行信息
). 参数信息
-n 取消默认输出
-r 识别扩展正则
-i 真实编辑文件(将内存中的信息覆盖到磁盘中)
-e 识别sed命令多个操作指令
.文件中添加信息的能力
.文件中删除信息的能力
)删除单行信息
)删除多行信息
)删除有xx信息的行
)删除第n行和第m行
)取消空行显示
.文件中修改信息的能力
)修改信息
)取出特定内容
)进行备份
)ni参数
.文件中查询信息的能力
)根据行号查询
a)显示单行信息
b)显示多行信息(连续)
c)显示多行信息(不连续)
)根据内容查询
a)输出单行消息
b)输出多行消息(连续)
c)输出多行消息(不连续)
[root@lbz01 ~]# cat >person.txt<<EOF //创建测试环境
> ,lbz,CEO
> ,lsn,CTO
> ,Alex,COO
> ,yy,CFO
> ,lbzyyy,CIO
> EOF
.文件中添加信息的能力
[root@lbz01 ~]# sed '1i100,lsnyyy,UFO' person.txt //在文件第一行添加信息100,lsnyyy,UFO
[root@lbz01 ~]# sed '$a108,lsnyyy,UFO' person.txt //在文件最后一行添加信息108,lsnyyy,UFO
[root@lbz01 ~]# sed '3alsn.txt' person.txt //在第三行后面添加lsn.txt信息
[root@lbz01 ~]# sed '2ilsn.txt' person.txt //在第二行前面添加lsn.txt信息
[root@lbz01 ~]# sed -e '/lbz/ilsnn' -e '/lbz/albzy' person.txt //在有lbz行的前面添加lsnn 后面添加lbzy信息
[root@lbz01 ~]# sed '$a100\n101' person.txt //添加多行信息
,lbz,CEO
,lsn,CTO
,Alex,COO
,yy,CFO
,lbzyyy,CIO .文件中删除信息的能力
[root@lbz01 ~]# sed '3d' person.txt )删除单行信息
#删除第三行信息
[root@lbz01 ~]# sed '2,6d' person.txt )删除多行信息
#删除文件中第二行到第六行内容
[root@lbz01 ~]# sed '/lbz/d' person.txt )删除有xx信息的行
#删除有lbz信息的行
[root@lbz01 ~]# sed '3d;6d' person.txt )删除第n行和第m行
#删除文件中第3行和第6行内容
[root@lbz01 ~]# sed -n '/./p' person.txt )取消空行显示
#第1种方法
[root@lbz01 ~]# sed '/^$/d' person.txt
#第2种方法
[root@lbz01 ~]# sed -n '/^$/!p' person.txt
#第3种方法
.文件中修改信息的能力
[root@lbz01 ~]# sed 's#lbz#lbzz#g' person.txt )修改单个内容信息
#语法说明:sed 's#原有内容#修改后内容#g' 文件信息
[root@lbz01 ~]# sed 's/#lbzz/lbz/g' person.txt
[root@lbz01 lbz]# ls )批量修改内容信息
aaa lbz01.jpg lbz05.jpg lbz09.jpg lbz_soft_link.jpg ok.txt
alex.txt lbz02.jpg lbz06.jpg lbz10.jpg lbz.txt.bak touch
error.txt lbz03.jpg lbz07.jpg lbz.jpg lsn.txt
info.log lbz04.jpg lbz08.jpg lbz.log lsny.txt
[root@lbz01 lbz]# ls lbz*.jpg|sed -r 's#(.*)jpg#mv & \1txt#g'
#批量修改文件的扩展名称 将lbzxx.jpg扩展名修改为lbzxx.txt
mv lbz01.jpg lbz01.txt
mv lbz02.jpg lbz02.txt
mv lbz03.jpg lbz03.txt
mv lbz04.jpg lbz04.txt
mv lbz05.jpg lbz05.txt
mv lbz06.jpg lbz06.txt
mv lbz07.jpg lbz07.txt
mv lbz08.jpg lbz08.txt
mv lbz09.jpg lbz09.txt
mv lbz10.jpg lbz10.txt
mv lbz.jpg lbz.txt
mv lbz_soft_link.jpg lbz_soft_link.txt
[root@lbz01 ~]# sed '2clsnn' person.txt //替换修改指定的一整行信息
[root@lbz01 ~]# ip a s eth0|sed -rn 's#^.*net(.*)/24.*#\1#gp' )取出特定内容
#语法说明:sed 's#()#\n#g' 文件信息 后项引用前项进行替换修改
10.0.0.200
[root@lbz01 ~]# sed -i.bak 's#lbz#lbzy#g' person.txt )进行备份
[root@lbz01 ~]# cat person.txt.bak
,lbz,CEO
,lsn,CTO
,Alex,COO
,yy,CFO
,lbzyyy,CIO
[root@lbz01 ~]# sed -ni 's#Alex#aaa#gp' person.txt )ni参数
# ni和参数同时使用,会将文件内容进行清空
[root@lbz01 ~]# cat person.txt
,aaa,COO
.文件中查询信息的能力
[root@lbz01 ~]# cat >person.txt<<EOF //创建测试环境
> ,lbz,CEO
> ,lsn,CTO
> ,Alex,COO
> ,yy,CFO
> ,lbzyyy,CIO
> EOF
)根据行号查询
[root@lbz01 ~]# sed -n '3p' person.txt a)显示单行信息
[root@lbz01 ~]# sed -n '1,3p' person.txt b)显示多行信息(连续)
#显示第1行到第3行的信息
[root@lbz01 ~]# sed -n '1;3p' person.txt c)显示多行信息(不连续)
#显示第1行和第3行的信息
)根据内容查询
[root@lbz01 ~]# sed -n '/lbz/p' person.txt a)输出单行消息
[root@lbz01 ~]# sed -n '/lbz/,/Alex/p' person.txt b)输出多行消息(连续)
#将有lbz到Alex行的信息都输出出来
[root@lbz01 ~]# sed -n '/lbz/p;/Alex/p' person.txt c)输出多行消息(不连续)
#将有lbz和alex行的信息都输出出来
补充:批量重命名专业命令: rename
[root@lbz01 lbz]# rename .jpg .txt lbz*.jpg
#命令说明:命令 文件名称需要修改的部分信息 修改成什么信息 将什么样的文件进行修改 

2.awk

//awk
#语法说明:awk [参数] '模式-动作' 文件
1).擅长取列
2).擅长统计分析日志
#符号用法:
$ $ $ : 取第几列信息
$NF : 取最后一列
$(NF-n) : 取倒数第几列
$ : 取所有列的信息
. 排除信息
. 查询信息
)按照行号查询
a)查询单行信息
b)查询多行信息(连续)
c)查询多行信息(不连续)
)按照内容查询
a)输出单行消息
b)输出多行消息(连续)
c)输出多行消息(不连续)
)显示特定内容
. 统计信息
) 日志信息进行统计(计数)
) 对日志信息数值进行求和
) (数组)进行排序分析
) 匹配的条件信息
. 替换信息
[root@lbz01 ~]# cat awk_test.txt //创建测试环境
Zhang Dandan :::
Zhang Xiaoyu :::
Meng Feiyu :::
Wu Waiwai :::
Liu Bingbing :::
Wang Xiaohua :::
Zi Gege :::
Li Youjiu :::
Lin Shaona :::
. 排除信息
[root@lbz01 ~]# awk '$0~/^#|^$/' awk_test.txt //打印出文件中空行进行排除/文件中注释信息
[root@lbz01 ~]# awk '$0!~/^#|^$/' awk_test.txt //文件中空行进行排除/文件中注释信息进行排除
补充:grep -Ev "^#|^$" 文件信息
sed -n '/^#|^$/!p' 文件信息
awk '/^#|^$/'
. 查询信息
)按照行号查询
[root@lbz01 ~]# awk 'NR==2' awk_test.txt a)查询单行信息
#查询第2行信息
[root@lbz01 ~]# awk 'NR==2,NR==4' awk_test.txt b)查询多行信息(连续)
#查询第2行到第4行的信息
[root@lbz01 ~]# awk 'NR==2;NR==4' awk_test.txt c)查询多行信息(不连续)
#查询第2行和第4行的信息
)按照内容查询
[root@lbz01 ~]# awk '/Xiaoyu/' awk_test.txt a)查询单行信息
#查询有Xiaoyu的行的信息
[root@lbz01 ~]# awk '/Xiaoyu/,/Waiwai/' awk_test.txt b)查询多行信息(连续)
#查询有Xiaoyu的行到Waiwai的行信息
[root@lbz01 ~]# awk '/Xiaoyu/;/Waiwai/' awk_test.txt c)查询多行信息(不连续)
#查询有Xiaoyu的行和Waiwai的行信息
)显示特定内容
[root@lbz01 ~]# awk '/Xiaoyu/{print $1,$3}' awk_test.txt //显示Xiaoyu的姓氏和ID号码
[root@lbz01 ~]# awk -F ":" '/^Zhang/{print $3}' awk_test.txt //显示姓氏是zhang的人,显示他的第二次捐款金额 [root@lbz01 ~]# awk -F "[ :]+" '/^Zhang/{print $1,$2,$5}' awk_test.txt //显示姓氏是zhang的人,显示他的第二次捐款金额和他的名字
Zhang Dandan
Zhang Xiaoyu
[root@lbz01 ~]# awk -F "[ :]+" '/^Zhang/{print $1,$2,$(NF-1)}' awk_test.txt //显示姓氏是zhang的人,显示他的第二次捐款金额和他的名字
[root@lbz01 ~]# awk '$3~/^41/{print $1,$2,$3}' awk_test.txt //显示所有以41开头的ID号码的人的全名和ID号码
Zhang Dandan
Liu Bingbing
[root@lbz01 ~]# awk '$3~/1$|5$/{print $1,$2}' awk_test.txt |column -t //显示所有ID号码最后一位数字是1或5的人的全名
[root@lbz01 ~]# awk '$3~/[1 5]$/{print $1,$2}' awk_test.txt |column -t
[root@lbz01 ~]# awk '$3~/(1|5)$/{print $1,$2}' awk_test.txt |column -t
. 统计信息
) 日志信息进行统计(计数)
[root@lbz01 ~]# awk '/^$/{i=i+1;print i}' /etc/services //统计/etc/services文件中空行数量
[root@lbz01 ~]# awk '/^$/{i=i+1}END{print i}' /etc/services [root@lbz01 ~]# awk '/^#/{i++}END{print i}' /etc/services //统计/etc/services文件中有井号开头的行 ) 对日志信息数值进行求和
[root@lbz01 ~]# awk '$NF~/bash/{i=i+1}END{print i}' /etc/passwd //统计普通用户数量 [root@lbz01 ~]# awk '$NF!~/bash/{i=i+1}END{print i}' /etc/passwd //统计虚拟用户数量 [root@lbz01 ~]# seq |awk '{sum=sum+$1;print sum}' //求和计算 ) 匹配的条件信息
[root@lbz01 ~]# awk 'BEGIN{print "姓","名","QQ号","捐款记录"}{print $0}END{print "操作结束"}' awk_test.txt |column -t
#BEGIN{} 在awk执行命令前做什么事情
END{} 在awk执行命令结束之后做的操作
姓 名 QQ号 捐款记录
Zhang Dandan :::
Zhang Xiaoyu :::
Meng Feiyu :::
Wu Waiwai :::
#Liu Bingbing :::
Wang Xiaohua :::
Zi Gege :::
Li Youjiu :::
Lin Shaona :::
操作结束
. 替换信息
[root@lbz01 ~]# awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' awk_test.txt //显示Xiaoyu的捐款,每个捐款数值前面都有以$开头, 如$110$220$330
$$$
补充:如何利用awk取出IP地址信息
[root@lbz01 ~]# ip a s eth0|awk -F "[ /]+" 'NR==3{print $3}'
10.0.0.200
求出测试文件中 所有人第一次捐款的总额和第三次捐款总额
[root@lbz01 ~]# awk -F ":" 'BEGIN{print "第一次总额","第三次总额"};/.*/{print$2,$4}' awk_test.txt
第一次总额 第三次总额 [root@lbz01 ~]# awk -F ":" 'BEGIN{print "第一次总额","第三次总额"}{a=a+$2;b=b+$4}END{print a,b}' awk_test.txt|column -t
第一次总额 第三次总额

版权属于:木丫头

转载必须声明

三剑客-sed awk的更多相关文章

  1. Linux(8):linux三剑客sed和awk & Shell 编程(1)

    linux 三剑客 之 sed # sed 是什么? # sed : 字符流编辑器 Stream Editor: sed 擅长 替换.取行等 # sed 的功能与版本: 处理纯文本文件.日志.配置文件 ...

  2. Linux三剑客grep/sed/awk

    grep/sed/awk被称为linux的“三剑客” grep更适合单纯的查找或匹配文本: sed更适合编辑匹配到的文本: awk更适合格式化文本,对文本进行较复杂各式处理: Grep --color ...

  3. linux三剑客grep|sed|awk实践

    最好先学习正则表达式的基本用法,以及正则表达式BREs,EREs,PREs的区别 此坑待填 grep sed awk

  4. Linux实战教学笔记18:linux三剑客之awk精讲

    Linux三剑客之awk精讲(基础与进阶) 标签(空格分隔): Linux实战教学笔记-陈思齐 快捷跳转目录: * 第1章:awk基础入门 * 1.1:awk简介 * 1.2:学完awk你可以掌握: ...

  5. [svc]linux正则实战(grep/sed/awk)

    企业实战: 过滤ip 过滤出第二行的 192.168.2.11. eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ine ...

  6. (转)不看绝对后悔的Linux三剑客之awk实战精讲

    原文:http://blog.51cto.com/hujiangtao/1923930 一.Linux三剑客之awk命令精讲 第1章 awk基础入门 1.1 awk简介 awk不仅仅时linux系统中 ...

  7. 详解Linux三剑客之awk

    第一篇 awk简介与表达式实例 一种名字怪异的语言 模式扫描和处理,处理数据和生成报告. awk不仅仅是linux系统中的一个命令,而且是一种编程语言:它可以用来处理数据和生成报告(excel):处理 ...

  8. Linux中磁盘管理与三剑客之awk初识

    昨日内容回顾 1.用两种方法实现 将文件中以 # 开头的行 把 # 去掉 sed -r 's/^ *#//g' /etc/fstab cat /etc/fstab | tr -d '^#' 2.将文件 ...

  9. 磁盘管理+三剑客之awk

    目录 磁盘管理+三剑客之awk 一.磁盘管理 二.格式化命令awk 1.awk的语法 2.参数 3.awk的生命周期 4.awk中的预定义变量 5.awk处理规则的执行流程 6.awk中的函数 7.a ...

随机推荐

  1. 破局AI落地难,数据标注行业需率先变革丨曼孚科技

    ​2019年,国内人工智能领域的投融资热情大幅降低,相当数量的AI企业彻底消失在了历史的长河中,“人工智能寒潮已至”甚至成为行业年度热词. 与前几年创业与投资热情齐头并进的盛况相比,近段时间的AI行业 ...

  2. 吴裕雄--天生自然 PYTHON数据分析:糖尿病视网膜病变数据分析(完整版)

    # This Python 3 environment comes with many helpful analytics libraries installed # It is defined by ...

  3. ASP.NET MVC自定义Numberic属性的验证信息

    最近在使用MVC4时碰到一个Model验证的问题:整型属性输入非整型字符串时,错误信息总是“字段 XXX 必须是一个数字”,我总觉得这句话读起来很别扭,所以就萌生了要改变这个默认错误提示信息的念头,但 ...

  4. 剑指offer-面试题21-调整数组顺序使奇数位于偶数前面-双指针

    /* 题目: 调整数组顺序使奇数位于偶数前面. */ /* 思路: 双指针: 一个指针last用于遍历,当为奇数时+1, 当为偶数时,交换last和pre指向的值,向前移动pre指针. */ #inc ...

  5. [SCOI2015]情报传递[树剖+主席树]

    [SCOI2015]情报传递 题意大概就是 使得在 \(i\) 时刻加入一个情报员帮您传情报 然后询问 \(x,y,c\) 指 \(x\)到\(y\)多少个人有风险-(大于c)的都有风险-每天风险值+ ...

  6. python中的__dict__和dir()的区别

    Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案. __dict__与dir()的区别: dir()是一个函数,返回的是list: __di ...

  7. CSS之 元素显示隐藏,用户界面样式,文本溢出隐藏,精灵技术,三角形

    元素的显示与隐藏 display 显示 display 设置或检索对象是否及如何显示 display: none; 隐藏对象 display: block; 除了转换为块级元素, 同时还有显示元素的意 ...

  8. Docker最全教程——从理论到实战(十七)

    前言 上一篇我们通过实战分享了使用Go推送钉钉消息,由于技痒,笔者现在也编写了一个.NET Core的Demo,作为简单的对照和说明. 最后,由于精力有限,笔者希望有兴趣的朋友可以分享下使用CoreR ...

  9. maven - 一键删除maven仓库无效jar包工具

    背景 在进行maven开发时,往往需要下载大量jar包,而由于网络不稳定等其他因素可能导致jar未下载完毕,然后保留了lastUpdated文件,导致无法更新失效的jar包. 现在提供个bat脚本,只 ...

  10. overfitting &&underfitting

    1.过拟合 然能完美的拟合模型,但是拟合出来的模型会含有大量的参数,将会是一个含有大量参数的非常庞大的模型,因此不利于实现 1.1解决过拟合的方法 1.1.1 特征选择,通过选取特征变量来减少模型参数 ...