

sed的进阶用法
source link: https://bajie.dev/posts/20221024-sed_advanced/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Sed的进阶用法
sed 和 awk 以及 cut 算是常用工具了,sed的高级用法也需要知道一下
sed 里面有2个空间,一个是pattern space,一个是hold space,默认都是空的
开始处理的时候,就从文件里一行一行读入 pattern space ,进行处理,hold space 只在你需要用到它的时候才会出现:
d : 清空pattern space中的内容,立即开始下个循环(意思是跳过默认的输出pattern space内容的阶段???不知理解的对不对)
h : 用pattern space中的内容替换hold pattern中的内容
H : 在hold space中的内容后面追加一个换行,把pattern space中的内容追加到hold space中
g : 用hold space中的内容替换pattern space中的内容
G : 在pattern space中的内容后面追加一个换行,把hold space中的内容追加到pattern space中
h, g会替换(可以理解为先清空,再复制), H, G是追加。
hH是放过去,gG是拿过来,小写是替换,大写是追加

分析一下经典的将文件内容反向打印
cat 1.txt
1
2
3
cat 1.txt | sed -n '1!G;h;$p'
3
2
1
‘1!G;h;$p’ 分析一下,1!G就是说第一行不执行G,从第二行开始执行G;然后h是每行都执行,最后一行的时候执行p
input | pattern | hold | command | pattern | hold | command | pattern | hold
1 | 1 | 空行 | | 1 | 空行 | h | 1 | 1
2 | 2 | 1 | G | 21 | 1 | h | 21 | 21
3 | 3 | 21 | G | 321 | 21 | h | 321 | 321

因为之前的参数是 -n 不打印,直到最后一行,$p打印Pattern空间里的内容,这样就直接被反转打印出来了。
Recommend
-
45
-
6
1.增强CSS的解析功能2.tree shaking3.scope hoisting4.如何用webpack打包组件库或工具库5.如何用webpack做server render6.如何在webpack里面做prerender自动清理构建目录当前构建时的问题每次构建的...
-
13
为了对各种日志框架进行整合,微软创建了一个用来提供统一的日志编程模式的日志框架。《日志的基本编程模式》以实例演示的方式介绍了日志的基本编程模式,现在我们来补充几种“进...
-
3
作者:冯主任,来源:科学营销派01实...
-
6
大家好,又见面了。 到这里呢,已经是本SpringData JPA
-
5
一日一技|Obsidian Command 进阶用法三则
-
3
工厂设计模式可能是最常用的设计模式之一,我想大家在自己的项目中都用到过。可能你会不屑一顾,但这篇文章不仅仅是关于工厂模式的基本知识,更是讨论如何在运行时动态选择不同的方法进行执行,你们可以看看是不是和你们项目中用的一样? 欢迎关...
-
14
大家好,这里是和你们一起探索 AI...
-
1
Vue进阶(四十五):精解 ES6 Promise 用法 精选 原创 NoSilverBullet 2023-04-04 08...
-
6
普通并查集# 我们在处理问题的时候,可能会遇到一些需要维护每个元素所在的集合的问题,而并查集却恰好...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK