文档章节

sed, awk 练习

F
 Fc丶
发布于 11/16 03:41
字数 874
阅读 8
收藏 0

1. sed打印某行到某行之间的内容

2. sed 转换大小写

  • 将单词首字母转化大写
  • 将所有小写转化大写

3. sed 在某一行最后面添加一个数字

4. 删除某行到最后一行

解析: {:a;N;$!ba;d}

:a      : 是做一个标识符, 标识符名称为 a(此处名称可以自定义)

N       将下一行文本读入 待操作空间(pattern space), sed操作是先将一行读入(pattern space) 模式空间, 然后根据命令处理这一行文本.

$!ba    可以拆解为 b:流程控制 回到前面一个标记 :(分号标记点) 的位置 即 a 标记,(这里的b 是 break 的意思) $! 为 b语句的判断条件, 如果满足这个条件即执行 break :a 这个动作, 
        # 这个 :a COMMAND; $!b:a  有点像是C语言的 do{}while(); 语句 这个do{} 就是:a 以及后继的命令, while() 就是 $!b:a , 而 $! 仅仅是 while() 里面的判断条件.
        # 这里的仅仅是有点相似, 准确的说 :a COMMAND; $!b:a 更像是 汇编或C 里面 loop: goto 语句, 一个标记点, 另一个是跳转.

---------

/^abc/      # 匹配 abc 开头的行
p           # 打印上面匹配到的行
:a          # 做标记
N           # 将该行的下一行读入 模式空间
$!ba        # 满足 $!(没有到最后一行)  条件时 跳回 :a 标记处
d           # 当上面语句执行完毕时,执行该语句, 删除

:a; COMMAND ;//ba 语句实验

  • 上面操作 是 匹配/.*/ 所有内容, {:a;N;3!ba} 将 第三行以及之前的内容读入pattern 空间内, ;p 将 pattern 空间内的 内容 打印出来.

5. sed 的空间概念

sed 命令在处理文件内容时, 会将当前行存储在临时缓冲区内, 称为(pattern space), 接着sed 命令处理缓冲区内的内容, 处理结束后, 会将缓冲区内的内容按照命令指定方式处理(默认会print, 也可以指定d :delete) 接着会清理缓冲区, 处理下一行, 重复上面动作.

sed 还有一段保留空间(hold space) 相当于仓库, 用户可以根据 需要将当前行内容放入该空间中, 便于后面需要时取出.

空间的相关操作:

d           Delete 了 pattern space 的内容

h H         复制/追加 pattern space 的内容到 hold space

g G         复制/追加 hold space 的内容到 pattern space 

x           交换  hold space 和pattern  space内容  

n           读取下一个输入行, 用下一个命令处理, 而不是从第一个命令开始处理

N           读取下一行到 pattern space 内, 和pattren space 内原有的内容作为一行处理. 会改变当前的行号

  • 123 开头的行移到 ee开头的行, 并将ee行 放到最后一行. 使用 hold space 做存储可以很方便做到这些.

6. sed 中遇到N 会将下一行连带汇总在一起处理

7. 打印2到6行含某个字符串的行

8. awk 中使用外部变量

awk -v val=$val

9.awk 合并文件

10. 过滤多个关键字

END

© 著作权归作者所有

共有 人打赏支持
F
粉丝 0
博文 33
码字总数 59204
作品 0
私信 提问
awk 和 sed 教程

awk: awk - Read and split file contents awk - Passing arguments or shell variables to awk awk - Match a pattern in a file in Linux awk - Join or merge lines on finding a pattern......

鉴客
2012/07/31
527
2
grep、sed、awk的使用笔记

学习grep、sed、awk之前,肯定是要先了解正则表达式。 学习之前,我们要先建立两个文件来练习。 vim a.txt cp /etc/passwd passwd 第一章 grep和正则表达式 一、 正则表达式 1、单个字符 特定...

D杀手D
07/20
0
0
Shell正则三剑客 | sed命令

sed命令基本用法 sed : Stream EDitor sed : 模式空间默认不编辑原文件,仅对模式空间中的数据做处理 : 而后,处理结束后,将模式空间打印至屏幕:sed 'AddressCommand' file ... Address(地...

寰宇01
10/28
0
0
grep sed awk

1、grep ,用来过滤,也可以用来过滤日记,某个关键字等; 选项: . * .* 0或多 ? 0或1 + 1或多 ^ $ ^$ | egrep '^root|bash' /etc/passwd egrep ^(root|test) /ec/passwd word{n} grep '[oo]{3......

芬野de博客
12/07
0
0
Linux学习----文本三剑客——sed(马哥教育原创)

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

Py爱好
08/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java面试题:面向对象,类加载器,JDBC, Spring 基础概念

1. 为什么说Java是一门平台无关语言? 平台无关实际的含义是“一次编写到处运行”。Java 能够做到是因为它的字节码(byte code)可以运行在任何操作系统上,与底层系统无关。 2. 为什么 Java...

Java干货分享
16分钟前
0
0
LeetCode算法题-Range Sum Query Immutable(Java实现)

01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第70题(顺位题号是303)。给定整数数组nums,找到索引i和j(i≤j)之间的元素之和,包括端点。例如: 给定nums = [-2,0,3,-5,2,-1] s...

qwergkp
21分钟前
0
0
慎用延时初始化(71)

延迟初始化是延时到需要域的值的时候才进行初始化 如果不需要,永远不初始化 既适用于静态域、也适用于实例域 延时初始化是一种优化 除非绝对必要,请尽量不要使用 降低了初始化开销、增加了...

Java搬砖工程师
21分钟前
1
0
中介者模式 调停者 Mediator 行为型 设计模式(二十一)

  用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散      而且可以独立地改变它们之间的交互。      中介者模式又称为调停...

SEOwhywhy
32分钟前
4
0
大数据Spark优化读取Hbase--region 提高并行数过程详细解析

一. Hbase 的 region 我们先简单介绍下 Hbase 的 架构和 region : 从物理集群的角度看,Hbase 集群中,由一个 Hmaster 管理多个 HRegionServer,其中每个 HRegionServer 都对应一台物理机器...

金铭鼎IT教育
32分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部