文本替换sed+字段处理cut,join+awk重新编排字段

【1】sed工具(Stream Editor)——流编辑器

sed 本身也是一个管线(管道)命令,可以分析 standard input 的啦! 而且 sed 还可以将数据进行取代、删除、新增、截取特定行等等的功能呢!
这里写图片描述
这里写图片描述

1.1)以行为单位的新增/删除功能

【玩玩荔枝呢】
这里写图片描述
【输出不是输出是 删除,删除】
这里写图片描述

1.2)以行为单位的取代与显示功能

这里写图片描述
这里写图片描述

1.3) 部分数据的搜索并取代的功能(g=global)

这里写图片描述
【Attention】上表中特殊字体的部分为关键词,请记下来!至于三个斜线分成两栏就是新旧字符串的替换啦!
这里写图片描述

荔枝要求

假设我只要 MAN 存在的那几行数据, 但是含有 # 在内的批注我不想要,而且空白行我也不要!此时该如何处理呢?
这里写图片描述
这里写图片描述

1.4)直接修改档案内容(危险动作)

sed 甚至可以直接修改档案的内容呢!

【玩玩荔枝吧】

这里写图片描述
这里写图片描述

【Declaration】 以下内容总结于shell脚本学习指南

【1】sed——stream editor 流编辑器

这里写图片描述
贴一张鸟哥的图片
这里写图片描述

这里写图片描述

1.1)替换细节——s命令里以g结尾表示: glocal 全局

这里写图片描述
这里写图片描述
这里写图片描述

1.2)sed的运作

sed 读取每个文件,一次读一行,将读取的行放到内存的一个区域——称为模式空间。
这里写图片描述
这里写图片描述
这里写图片描述

1.3) 你还记得head吗?

head N file
count=$1
sed ${count}q "$2"
# $1=N, $2=file

1.4) 说替换

范围:可指定行的范围,以逗点隔开

sed -n '10,20p' hadoop.sh 只打印10~20行sed -n '/export/,/export/ s/word1/word2/g'  在export和export之间的行,用word2全局替换word1
sed -n '/tang/ !s/am/AM/g' tang.txt  在没有tang的行用AM替换am;

这里写图片描述
这里写图片描述

1.5)有多少文本会改动

和有多少爱可以重来是一样的?呵呵了?
有多少文本会匹配 + 从哪儿开始匹配?

【Answers】:

正则表达式可以匹配整个表达式输入文本中最长的,最左边的子字符串。除此之外,匹配的空null字符串,则被认为是比完全不匹配的还长。
如ab*c , 匹配ac, 而b* 成功匹配a c 间的null字符串。
by the way, POSIX指出:完全一致的匹配,指的是最左边开始匹配,针对每一子模式, 由左向右,必须匹配最长的可能字符串。
(子模式指的是在ERE下圆括号的部分)

【看个荔枝,you should got it】
这里写图片描述
这里写图片描述

【2】字段处理

2.1)cut剪切文本

cut -c 以字符为主 做剪切操作 (startup 1)
cut -d 设置分隔符
cut -f 以字段为主 进行剪切操作  (startup 1)

【荔枝时间到】

这里写图片描述
这里写图片描述

2.2)join连接文本

主要选项

  • -1 field1 表明要结合 的 字段
  • -2 field2 表明要结合 的 字段
  • -o file.field 输出file的field字段,其他字段不打印
  • -t seperator 分隔符


    这里写图片描述

【3】使用awk重新编排字段

(以下内容转自鸟哥)

awk 主要是处理『每一行的字段内的数据』,而默认的『字段的分隔符为 “空格键” 或  “[tab]键” 』!
这里写图片描述

【Attention】注意awk的处理格式。

【相关说明】

以上面的例子来说, root 是 1192.168.1.1003 啦!后面以此类推~呵呵!还有个变数喔!那就是 00 代表『一整行资料』的意思~以上面的例子来说,第一行的 $0 代表的就是『root …. 』那一行啊!

3.1)awk的处理流程:

  1. 读入第一行,并将第一行的资料填入 0,1, $2…. 等变数当中;
  2. 依据 “条件类型” 的限制,判断是否需要进行后面的 “动作”;
  3. 做完所有的动作与条件类型;
  4. 若还有后续的『行』的数据,则重复上面 1~3 的步骤,直到所有的数据都读完为止。
    经过这样的步骤,你会晓得, awk 是『以行为一次处理的单位』, 而『以字段为最小的处理单位』。

3.2)那么 awk 怎么知道我到底这个数据有几行?

有几栏呢?这就需要 awk 的内建变量的帮忙啦~
这里写图片描述

【荔枝时间到】

列出每一行的账号(就是 $1);
 列出目前处理的行数(就是 awk 内的 NR 变量)
 并且说明,该行有多少字段(就是 awk 内的 NF 变量)

这里写图片描述
这里写图片描述

【Attention】

要注意喔,awk 后续的所有动作是以单引号『 ’ 』括住的,由于单引号和双引号都必须是成对的, 所以, awk 的格式内容如果想要以 print 打印时,记得非变量的文字部分,包含上一小节 printf 提到的格式中,都需要使用双引号来定义出来喔(单引号里面内嵌双引号)!因为单引号已经是 awk 的指令固定用法了!
这里写图片描述

【Attention】

注意喔,在 awk 内的 NR, NF 等变量要用大写,且不需要用钱字号 $ 啦!

【Complementary】

awk的print 语句会自动换行,就想C中的printf语句类似;
但是如果换做用printf来格式化打印字符串的话,就要通过\n转义序列的使用来进行换行功能。
这里写图片描述

3.3)awk的逻辑运算符号;

这里写图片描述

值得注意的是那个『 == 』的符号,因为:
 逻辑运算上面亦即所谓的大于、小于、等于等判断式上面,习惯上是以『 == 』来表示;
 如果是直接给予一个值,例如变量设定时,就直接使用 = 而已(=赋值变量符号)。

【荔枝又来了】

好了,我们实际来运用一下逻辑判断吧!举例来说,在 /etc/passwd 当中是以冒号 “:” 来作为字段的分隔, 该档案中第一字段为账号,第三字段则是 UID。那假设我要查阅,第三栏小于 10 以下的数据,并且仅列出账号和第三栏, 那么可以这样做:
这里写图片描述
Problem: 有趣吧!不过,怎么第一行没有正确的显示出来呢?
Reason:这是因为我们读入第一行的时候,那些变量  1,2… 默认还是以空格键为分隔的,所以虽然我们定义了 FS=”:” 了, 但是却仅能在第二行后才开始生效。
How to solve it ?那么怎么办呢?我们可以预先设定 awk 的变量啊! 利用 BEGIN 这个关键词喔!这样做:
(Attention:这里鸟哥要比shell脚本学习指南讲的要好得多)
这里写图片描述
这里写图片描述

3.4) Relative Specification:

(1)awk的指令间隔:所有 awk 的动作,亦即在 {} 内的动作,如果有需要多个指令辅助时,可利用分号『;』间隔(这就是刚才为什么会报awk语法错误的原因,因为少加了一个分号[;]), 或者直接以 [Enter] 按键来隔开每个指令,例如上面的范例中,鸟哥共按了三次 [enter] 喔!
(2) 逻辑运算当中,如果是『等于』的情况,则务必使用两个等号『==』!
(3) 格式化输出时,在 printf 的格式设定当中,务必加上 \n ,才能进行分行! 不过要用双引号吧\n包起来;
(4) 与 bash shell 的变量不同的是,在 awk 当中,变量是可以直接使用的,不需加上 $ 符号。
【Note】以上的 说明很是重要,牢记。
【print 与 printf 的 区别的例子】

(简单说就是print只能简单的打印字段列表并自动换行,而printf不能提供自动换行,但是可以进行格式化打印 like C language)

这里写图片描述

3.4) awk 的动作内 {} 也是支持 if (条件) 的喔!

这里写图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

netsuite 数据集成_Java中带有NetSuite数据实体的对象关系映射(ORM)

netsuite 数据集成对象关系映射(ORM)技术使使用关系数据源更加容易,并且可以将逻辑业务模型与物理存储模型联系在一起。 遵循本教程,将NetSuite数据的连接集成到基于Java的ORM框架Hibernate中。 您可以使用Hibernate将面向对象的…

python内置装饰器property_python之内置装饰器(property/staticmethod/classmethod)

python内置了property、staticmethod、classmethod三个装饰器,有时候我们也会用到,这里简单说明下1、property作用:顾名思义把函数装饰成属性一般我们调用类方法成员,都是如下写法:class propertyTest():def __init__(…

关于bochs用X11启动的说明

关于网络上有很多关于 bochs启动时 连接到X Windows 报错: cannot connect to X display . 昨天搞了半天晚上 今天早上 直到现在 才搞懂。 主要的原因 是我使用了终端 比如 xshell or putty 去连接 centos ,而以这种方式的连接 是只能够 传递字符&a…

在MyEclipse中访问MySql

Window 选项卡 选择 Open PerSpective 选择 MyEclipse Database Explorer,打开数据库视图 在 DB Browser 中单击右键,选择 New … 在 Database Driver 界面配置 a. Driver template: 连接的数据库模板 b. Driver name: 自定义的名字 c. Connection URL&a…

自动化测试框架 2019_2019年用于自动化的5个最佳Java测试框架

自动化测试框架 2019几十年来,Java一直是开发应用程序服务器端层的首选编程语言。 尽管JUnit一直在与开发人员一起帮助他们进行自动化的单元测试,但随着时间的推移和测试的发展,当自动化测试不断增长时,已经开发了许多基于Java的开…

X86汇编语言中的registers相关

0、写在前面 本文中总结于王爽老师的汇编语言,建议有兴趣的都买一本,以支持王爽老师的辛勤付出。再者,这本书写的确实很nice。 8086CPU共有14个registers:AX, BX, CX, DX, SI&#…

代码流程图生成器_【进阶Python】第五讲:迭代器与生成器

点击蓝字关注我迭代是Python中常用且非常强大的一个功能,它可以用于访问集合、列表、字符串、字典等数据结构的元素。我们经常使用循环和条件语句,我们也清楚哪些是可以迭代访问,但是具体它们之间有什么有什么异同之处?有哪些特点…

生成最简单的验证码图片的Java代码

后端代码: package priv.lwx.servlet.sl.web; /*** description** author liaowenxiong* date 2022/3/25 09:56*/import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.…

cognito_将Amazon Cognito与单页面应用程序(Vue.js)集成

cognito在本文中,我们将研究使用OAuth协议通过Amazon Cognito对单页应用程序(使用Vue.js构建)进行身份验证。 在上一篇文章中,我们将服务器端应用程序与Amazon Cognito集成在一起。 搭建单页应用程序 我们将使用vue-cli创建一个空…

段描述符表(GDT+LDT)的有感

【0】写在前面 要知道,在汇编中,代码的装入顺序决定了在内存中的地址位置。所有的代码或者数据都在硬盘上,当调试或者启动的时候,加载到内存;当需要对数据进行处理的时候,我们通过将数据从内存载入到regis…

地理信息系统概论_地理信息系统概论黄杏元第3版配套练习题库——才聪学习网...

黄杏元《地理信息系统概论》(第3版)配套题库【考研真题精选+章节题库】一、选择题1完整的GIS主要由四个部分构成,即计算机硬件系统、计算机软件系统、(  )和系统管理操作人员。[杭州师范大学2018年研]A.网络B.用户C.…

PO/BO/VO/DTO/POJO/DAO/DO

文章目录DO(Domain Object)DO(Data Object)POVOBODTOPOJODAOJavaBeanEJBEntity应用程序的分层设计MVC业务分层阿里开发手册关于POJO类的命名规范总结参考文章DO(Domain Object) Domain Object,…

openshift_OpenShift Origin中的Kubernetes Spark运算符(第1部分)

openshift本系列有关Radanalytics.io的Kubernetes Spark运算符 OpenShift起源 。 它是一个开源的运营商来管理 Apache Spark集群和应用程序。 为了在OpenShift Origin上部署操作员,第一次需要为其克隆GitHub存储库: git clone https://github.com/rad…

小程序二级页面tabbar_小程序页面推广踩坑记

前几天,团队里有个小伙伴遇到一个问题,卡壳了大半天。我觉得这个例子值得拿出来分享给大家。希望大家以后遇到类似的问题能顺利绕过这种坑。业务场景很常见,就是为了配合小程序中特定页面的推广,区分推广渠道和人员,逐…

转移指令jmp和跳转指令call

【-1】写在前面 以下内容文字描述来自于 王爽老师的《汇编语言》教材,建议大家都买一本,哈哈。不是我打广告,确实人家写的好,应该支持。我只是附上了自己的图片和理解而已。 【0】先上干货 只修改ip,称为段内转移&a…

jmeter负载测试测试_使用Apache JMeter负载测试Web应用程序

jmeter负载测试测试Apache JMeter是用于模拟Web应用程序上的用户负载以测试性能的出色工具。 您可以通过指定用户数量和请求间隔来轻松地构建测试计划,然后JMeter将为每个用户生成一个线程并访问您的Web应用程序。 在测试结束时,您将获得一份性能摘要报告…

Windows下安装Nutch

Nutch安装 一、需求部份 a) Nutch是Java开发的所以需要下载Java JDK 下载地址http://java.sun.com/javase/downloads/index.jsp b) Nutch的演示搜索页面是Jsp的需要Tomcat做服务器 下载地址:http://jakarta.apache.org/tomcat/ c) Nutch的脚本都是用Linux的Shell写的…

python子进程关闭fd_gpg –passphrase-fd无法使用python 3子进程

以下脚本encrypt_me.py(modified from another post)使用gpg加密自身并以装甲形式打印出密文.但它只适用于python2.7但不适用于python3?你知道它在python3上运行时有什么问题吗?import subprocessimport shleximport osimport sysin_fd, out_fd os.pipe…

程序编码(机器级代码+汇编代码+C代码+反汇编)

【-1】相关声明 本文总结于csapp; 了解详情,或有兴趣,建议看原版书籍;【0】程序编码 GCC调用了一系列程序,将源代码转化成可执行代码的流程如下: (1)C预处理器扩展源代码&#xf…

angular1.2.27_Angular 8 + Spring Boot 2.2:立即构建一个CRUD应用程序!

angular1.2.27“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 如果您已经成为Java开发人员超过15年,那么您可能还记得何时…