文档章节

0411 第十二次课:三剑客-sed、awk

w
 wxy丶
发布于 2019/04/08 18:22
字数 1222
阅读 13
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

sed命令

一、sed命令

  • sed简介

    sed命令主要用于删除、查找替换

  • sed的用法:

    sed命令模式:sed [option] 'sed命令' filename
    
    sed脚本模式:sed [option] 'sed script' filename
    
  • sed选项:

    -n:只打印匹配到行

    -e:直接在命令行进行编辑,此为默认的选项

    -f: 执行指定脚本中的script语句

    -i:直接修改文件中的内容

  • sed动作说明

    a:a的后面可以是字符串,这些字符串会新增到下一行(目前的下一行)

    c:取代,c的后面可以是字符串,这些字符串可以取代n1,n2之间的行

    d:删除

    i:插入,i的后面可以是字符串,这些字符串会在新的一行出现(目前的上一行)

    p:打印,通常p和 -n一起使用

    s:替换,进行替换,通常s是搭配正则,例如:s/oo/tt/g(把oo替换为tt)

  • 示例:

    1、使用sed进行匹配

    sed -n '/root/'p passwd

    2、sed不区分大小写匹配

    sed -n '/root/'Ip passwd

    3、删除1-30(并不会操作文件)

    sed '1,30'd passwd |wc -l

    4、把第1-5行替换为“111”

    sed '1,5'c'111' passwd

    5、指定行数替换

    sed '1,10s/oo/xx/g' passwd

    6、全局替换

    sed '$s/oo/xx/g' passwd

    7、把passwd文本以:分割,把第一段和最后一段进行替换

    以第一行为例:

    sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/' passwd |head -n 1

    解释:

    -r :使用扩展正则。可以不使用脱意符

    /([^:]+):(.*):([^:]+)/ 以“:”分割为三段。

    第一段([^:]+):,不以:开头,以:结尾,“+”表示一个或多个字符。对应的输出结果就是:

    第二段(.): (.)贪婪匹配,以“:”结尾。对应的输出结果是:

    第三段([^:]+) 不以“:”开头,“+”表示一个或多个字符。对应的输出结果就是:

    \1表示第一个()内容,\2表示第二个()内容,\3表示第三个内容

    最终的输出结果:

    8、在某行插入字符

    在第三行插入‘333’

    sed ‘3’i‘333’

二、awk

  • awk简介

    1、awk是一种编程语言,用于对文本和数据进行处理的。

    2、具有强大的文本格式化能力。

    3、利用命令awk,可以将一些文本整理成为我们想要的样子。

    4、命令awk是逐行进行处理的。

  • awk示例

    1、指定分隔符进行分割

    awk -F ':' '{print $1}' passwd

    -F : 指定分隔符,如果不指定分隔符默认是以空格或者空白行,作为分割

    $1 : 表示打印第一段,如果是$2就是打印第二段

    2、多段打印

    awk -F ':' '{print $1,$2,$3}' passwd

    3、打印全部段

    awk -F ':' '{print $0}' passwd

    4、awk匹配

    awk '/oo/' passwd

  • awk正则

    awk可以使用正则,并且自带脱意功能,不需要像grep -E 和sed -r 进行脱意。

    1、匹配包含‘root’或者‘user’的行

    awk '/user|root/' passwd

    2、以‘:’分割,匹配包含‘root’或者‘user’的行,并多段打印

    awk -F ':' '/root|user/ {print $1,$2}' passwd

    3、 awk多个匹配,并进行分割

    awk -F ':' '/root/ {print $1,$2} /user/ {print $1,$2,$3}' passwd

    匹配包含'root'的行,并打印第一第二多段

    匹配包含'user'的行,并打印第一,第二,第三段

  • awk数学运算匹配

    1、匹配第三段等于0的

    可以不输入print也会默认打印。

    awk -F ':' '$3==0' passwd

    2、匹配第三段大于1000的并指定打印第三段

    awk -F ':' '$3>=1000 {print $3}' passwd

    注意的是如果数字中使用了""号,会认为是字符串则会按ascll码进行排序

    3、&&和||

    匹配第三段大于1000的行,并且第六段是‘/home/test’的行

    awk -F ':' '$3>1000 && $6=="/home/test"' passwd

    匹配第三段大于1000的行,或者第六行等于‘/home/test’

    awk -F ':' '$3>1000 || $6=="/home/test"' passwd

    4、两个字段进行比较

    匹配第三段小于第四段的行

    awk -F ':' '$3<$4' passwd

  • awk内置变量

    1、输出分隔符:OFS

    OFS是指定print时用到的分隔符

    awk -F ':' '{OFS="#"} $3>=1000 {print $1,$3}' passwd

    {OFS="#"}就是在print时以‘#’作为分隔符

    2、NR 显示行数

    awk -F ':' '{print NR": "$0}' passwd

    NR也可以用来做判断条件

    awk -F ':' 'NR>10 {print NR": "$0}' passwd

    3、NF:显示段数

    awk -F ':' '{print NF": " $0}' passwd

  • awk改变值

    将第一段全部改为root

    awk -F ':' '$1="root"' passwd

    赋值后所有的分割符都没了,可以再使用OFS加上:

    awk -F ':' '{OFS=":"} $1="root"' passwd

  • awk求和

    把第三段的数字加起来,并打印

    awk -F ':' '{(tot=tot+$3)};END {print tot}' passwd

    {tot=tot+$3}:意思是把第三段的数字循环相加

© 著作权归作者所有

w
粉丝 13
博文 66
码字总数 75691
作品 0
私信 提问
awk的基本概念,基础用法和高级用法

awk: 文本处理三剑客:grep系,sed,awk grep系:grep,egrep,fgrep,基于PATTERN进行文本过滤; sed:流编辑器,逐行编辑器;模式空间,保持空间; awk:报告生成器;格式化文档输出;...

狐狸和鳄鱼
2018/04/20
0
0
9.1-9.7 正则三剑客:grep、sed、awk

grep工具 grep是什么 grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使...

熊猫头先生
2019/02/18
0
0
正则三剑客grep、sed、awk

正则 正则就是一串有规律的字符串,掌握好正则对于编写shell脚本有很大帮助,各种编程语言中都有正则,原理是一样的 正则三剑客 grep sed awk grep 参数-E以及egrep egrep == grep -E egrep可...

林怡丰
2019/04/18
33
0
Linux学习----文本三剑客——sed(马哥教育原创)

来源:马哥教育 我以前的文章介绍过grep了,今天我就来说一下第二个sed,它是stream editor的缩写。在Linux的文本文件中文本存储都是一行,显示时表现的多行其实都是因为有换行符的存在,例如...

Py爱好
2018/08/02
93
0
Shell正则四剑客 | sed命令

sed简介 sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲...

寰宇01
2018/10/28
75
0

没有更多内容

加载失败,请刷新页面

加载更多

dynamic-connectivity 动态连通性问题之 quick-union 算法

quick-union 的思想是:若对象 p 的 root_id 和对象 q 的 root_id 相等,则认为 p 和 q 连通。 若要将对象 p 和对象 q 连通(已知两对象未连通),则将 p 的 root_id 的值设为 q 的 root_id ...

Phpythoner_Alei
今天
33
0
OSChina 周六乱弹 —— 实在选不出来就唱国歌

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享阿冗的单曲《你的答案》。--祝大家在2020年都找到自己答案。 《你的答案》- 阿冗 手机党少年们想听歌,请使劲...

小小编辑
今天
12
1
Maven打包可执行Jar包的方法

在使用Java开发中,会使用到将工程打包成可执行的jar包的情况,那么在maven中怎么将项目中的依赖包都添加到jar中呢。在pom.xml中添加一下插件: <build><plugins><plugin><ar...

CapJes
今天
10
0
使用vue 开发地图类系统(openlayers.js)的注意。

使用vue 开发地图类系统的注意。 1、使用地图应该创建的对象 少使用 vue 的data 和计算属性(comments)存数据或是vuex。 为什么要要注意这个问题呢? 答:这个就要了解到vue的实现原理 。原理...

DY-Tao
昨天
7
0
web移动端学习:高德地图demo(一)

在高德地图开发中申请开发者资格,然后在控制台中新建应用,获得KEY; 新建模板HTML文件; <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>地图demo</title><scri......

dxiya
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部