Sed的进阶用法

sed 和 awk 以及 cut 算是常用工具了,sed的高级用法也需要知道一下

sed 里面有2个空间,一个是pattern space,一个是hold space,默认都是空的

开始处理的时候,就从文件里一行一行读入 pattern space ,进行处理,hold space 只在你需要用到它的时候才会出现:

1d : 清空pattern space中的内容,立即开始下个循环(意思是跳过默认的输出pattern space内容的阶段???不知理解的对不对)
2h : 用pattern space中的内容替换hold pattern中的内容
3H : 在hold space中的内容后面追加一个换行,把pattern space中的内容追加到hold space中
4g : 用hold space中的内容替换pattern space中的内容
5G : 在pattern space中的内容后面追加一个换行,把hold space中的内容追加到pattern space中
6
7h, g会替换(可以理解为先清空,再复制), H, G是追加。

hH是放过去,gG是拿过来,小写是替换,大写是追加

1666593244877

分析一下经典的将文件内容反向打印

1cat 1.txt
21
32
43
5
6cat 1.txt | sed -n '1!G;h;$p'
73
82
91

‘1!G;h;$p’ 分析一下,1!G就是说第一行不执行G,从第二行开始执行G;然后h是每行都执行,最后一行的时候执行p

1input | pattern |  hold   | command | pattern | hold | command | pattern | hold
21     | 1       |  空行    |         | 1       | 空行 |  h      | 1       | 1
32     | 2       |  1      | G       | 21      | 1    |  h      | 21      | 21
43     | 3       |  21     | G       | 321     | 21   |  h      | 321     | 321

1666595506589

因为之前的参数是 -n 不打印,直到最后一行,$p打印Pattern空间里的内容,这样就直接被反转打印出来了。


Iptables的基本用法
Gitlab的CICD实际生产环境应用
comments powered by Disqus