当前位置: 首页 > Linux

Linuxsed的G、H、g、h使用命令详细讲解

时间:2023-04-06 12:03:57 Linux

sed的执行过程,逐行处理特征1.将文本的第一行读入内存模式空间(patternspace),相当于放到了流程线上来处理2.将处理后的结果存放在另一个内存空间(holdspace)中,相当于一个临时仓库。3、输出处理结果,循环处理第二行,覆盖清除(patternspace)和(holdspace)到最后一行可能会导致sed不走正常流程。这时sed已经设置了一些高级命令来满足用户的要求。sed命令:g:[address[,address]]g将holdspace中的内容复制到patternspace中,清除原patternspace中的内容G:[address[,address]]Gappendholdspace中的内容to模式空间后\nh:[address[,address]]h将模式空间中的内容复制到holdspace中,原holdspace中的内容清空H:[address[,address]]Hcopythe模式空间中的内容将内容附加到保留空间\nd:[address[,address]]d删除模式中的所有行,并将下一个新行读入模式D:[address[,address]]Ddeletethemultilinepattern第一行不读入下一行。不管是大写还是小写,g和h在模式空间和保持空间中都是互相复制的。区别在于小写表示清除原有数据,大写表示保留原有数据并追加新数据。例子[root@case100~]#catsed.txt123[root@case100~]#sed'1!G;h;$!d'sed.txt#ps:1!G第1行不执行"G"命令,从第2行开始执行。$!d,最后一行不删除(保留最后一行)321图形分析过程P:PatternSpaceH:HoldSpaceBlue:HoldSpace中的数据Green:PatternSpace中的数据case[root@case100~]#catsed2.txt12345[root@case100~]#sed'2h;5G'sed2.txt#将第二行放在临时仓库(holdspace)中,然后追加到(patternspace)第五行之后123452[root@case100~]#sed'2h;5g'sed2.txt#将第2行放入临时仓库(holdspace),然后覆盖(patternspace)第5行数据12342[root@case100~]#sed'2h;3H;5g'sed2.txt#将第2、3行放入临时仓库(holdspace),然后覆盖(patternspace)第5行的数据123423[root@case100~]#sed'2h;3h;5g'sed2.txt#将第二行读入临时仓库(holdspace);但是被后面读到的第三行数据覆盖了,所以2h其实是无效的,然后第三行数据覆盖(模式空间)5行数据12343参考链接:https://www.cnblogs.com/fhefh/archive/2011/11/22/2259097.html