30人的网站建设公司年利润是多少,长沙网上注册公司流程,网站开发语言排行,那些网站权重高shell脚本编程系列 保留空间
模式空间#xff08;pattern space#xff09;是一块活跃的缓冲区#xff0c;在sed编辑器执行命令时保存着待检查的文本#xff0c;但它并不是sed编辑器保存文本的唯一空间。sed编辑器还有另一块称作保留空间#xff08;hold space#xff0…
shell脚本编程系列 保留空间
模式空间pattern space是一块活跃的缓冲区在sed编辑器执行命令时保存着待检查的文本但它并不是sed编辑器保存文本的唯一空间。sed编辑器还有另一块称作保留空间hold space的缓冲区。当你在处理模式空间中的某些行时可以用保留空间临时保存部分行。与保留空间相关的命令有
h 将模式空间复制到保留空间H 将模式空间附加到保留空间g 将保留空间复制到模式空间G 将保留空间附加到模式空间x 交换模式空间和保留空间的内容
[root192 Chapter21-Scripts]# sed -n /First/{h;p;n;p;g;p}data2.txt
First Data Line
Second Data Line
First Data Linesed命令使用正则表达式作为地址过滤出含有单词First的行当满足前面条件的行出现时{}中的第一个命令h会将该行复制到保留空间此时模式空间的内容和保留空间的内容是一样的p命令打印模式空间的内容也就是第一行n命令会提取数据流的下一行将其放入模式空间现在模式空间的内容为原文本中第二行对应的内容而保留空间的内容为原文本中第一行对应的内容p命令打印模式空间的内容为第二行g命令会将保留空间的内容复制到模式空间替代模式空间的内容此时模式空间和保留空间的内容又一致了。p命令再次打印模式空间的内容 排除命令
sed编辑器可以将命令应用于数据流中的每一行或是由单个地址或地址区间指定的多行。还可以指定命令不应用于数据流中的特定地址或地址空间。感叹号(!)命令用于排除negate命令也就是让原本会起作用的命令失效。
sed -n /Header/!p data2.txt正常情况p命令只会打印匹配规则的行加了感叹号之后情况反过来了除了包含单词Header的那一行文件中的其他行都被打印出来了。 对于sed命令在多行模式中没法匹配最后一行的情况使用排除命令也可以解决。
sed $!N;s/System\nAdmin/DevOps\nEngineer/;s/System Admin/DevOps Engineer/ data4.txt利用排除命令、模式空间和保留空间可以轻松实现文本行反转的功能
#!/bin/bash
# Shell wrapper for sed editor script
# to reverse test file lines.
#
sed -n {1!G; h; $p} $1
#
exit