sed, awk 练习

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

转载于:https://my.oschina.net/nikoF/blog/2876963

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值