linux sed 循环多行,linux sed 多行处理详细总结
在正常情况下,sed将待处理的行读入模式空间,脚本中的命令就一条接着一条的对该行进行处理,直到脚本执行完毕,然后该行被输出,模式空间请空;然后重复刚才的动作,文件中的新的一行被读入,直到文件处理完备。但是,各种各样的原因,比如用户希望在某个条件下脚本中的某个命令被执行,或者希望模式空间得到保留以便下一次的处理,都有可能使得sed在处理文件的时候不按照正常的流程来进行。这个时候,sed设置了一些高级命令来满足用户的要求。如果想要学习sed的高级命令,首先要了解如下两个缓存区:
1、模式空间(pattern space)的定义:模式空间就是一个缓存区,保存sed刚刚从输入端读取的。
2、暂存空间(hold space)的定义:暂存空间就是在处理模式空间数据的时候,临时缓存数据用的。
还有几个命令参数:
g: 将hold space中的内容拷贝到pattern space中,原来pattern space里的内容清除
G: 将hold space中的内容append到pattern space\n后
h: 将pattern space中的内容拷贝到hold space中,原来的hold space里的内容被清除
H: 将pattern space中的内容append到hold space\n后
x: 交换pattern space和hold space的内容
比如咱们想要倒排一个文件的内容,文件如下:
[qiu.li@l-tdata1.tkt.cn6 ~]$ cat tmp
1-line
2-line
3-line
执行如下命令:
[qiu.li@l-tdata1.tkt.cn6 ~]$ sed '2,$G;h;$!d' tmp
3-line
2-line
1-line
下面咱们逐步理解上面的执行过程
一、让咱们来分析一下如下三条命令:
2,$G:从第二行到最后一行执行G命令
h:执行h命令
$!d:删除除了最后一行的所有行
二、具体的操作
扫描到第一行
将1-line放入模式空间;此时模式空间还是1-line;
直接执行h命令,此时暂存空间是1-line;
执行d命令,删除了模式空间仅有的一行数据,删除之后,模式空间是空的
扫描到第二行
将2-line放入模式空间
执行G命令,将暂存空间的1-line添加到模式空间2-line的后面,此时模式空间是2-line\n1-line;
执行h命令,此时暂存空间的内容是2-line\n1-line;
执行d命令,模式空间被清空
扫描到第三行
将3-line放入模式空间,
执行G命令,将暂存空间的2-line\n1-line添加到模式空间3-line的后面,此时模式空间是3-line\n2-line\n1-line;
执行h命令,此时暂存空间的内容是3-line\n2-line\n1-line;
不执行$!d;
直接输出 3-line\n2-line\n1-line
当然,命令:sed '1!G;h;$!d' tmp 也能有这个效果。
linux sed 循环多行,linux sed 多行处理详细总结相关推荐
- linux下循环显示图片,Linux快速显示图片
首先在Ubuntu里面制作图片, ######################################################################## 1920x1080为 ...
- linux怎么循环执行命令,linux命令:for循环
for循环: 进行循环操作,for循环语句 1.命令格式: 第一种格式: for变量 in 列表; do 循环体 done Usage: for I in {1..100}; do let SUM+= ...
- 【Linux脚本-sed命令在文本首行和尾行插入空行】
@[TOC]Linux脚本-sed命令在文本首行和尾行插入空行 Linux脚本-sed命令在文本首行和尾行插入空行 演示如下: 首先创建需要操作的文本文件 //create a file contai ...
- linux 给文件替换字符串/替换内容/替换某行 (shell,sed)
本文是要讲linux 不打开文档/文件的情况下,替换文本内容. 打开文档,在文档/文件内替换内容的,可以用vim,可参考这篇文章vim 替换文本 . 话题相关 #linux 文件替换字符串 #sed ...
- 【linux】使用sed删除大文件中的指定行
[linux]使用sed删除大文件中的指定行 引言: 最近在清洗数据时遇到一个超大的文件,需要删除其中不符合数据要求的指定行.使用之前写好的python脚本清洗速度太慢,于是检索了许多linux文件处 ...
- linux替换某一行中字符串,linux 给文件替换字符串/替换内容/替换某行 (shell,sed)...
本文是要讲linux 不打开文档/文件的情况下,替换文本内容. 打开文档,在文档/文件内替换内容的,可以用vim,可参考这篇文章vim 替换文本 . 话题相关 #linux 文件替换字符串 #sed ...
- Linux shell中使用sed 替换\n换行符 (多行边一行、一行变多行)
基本语法: sed "s/要匹配的字符串/要替换成的字符串/g" test.gson 语法解释:sed是按行处理文本数据的,每次处理一行数据后,都会在行尾自动添加trailing ...
- linux如何正则匹配删除一行,shell sed命令匹配替换删除最后第一行字符正则表
只显示每行的第一个单词 [root@localhost ~]# sed -r 's/([^0-9a-Z]+)(.+)//gp' passwd root bin daemon adm 打印每行3次:se ...
- linux运维实战练习及linux shell脚本、awk、sed工具命令学习总结
一.linux shell 脚本 1.描述shell程序的运行原理(可附带必要的图形说明): Linux系统的shell作为操纵系统的外壳,为用户提供使用操纵系统的接口.它是命令语言.命令解释程序及程 ...
- Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk
0. grep命令 1. Linux ls -ld 1 2. Linux 中ls -l // ll 命令详解 (7个字段):文件属性 1 3. shell中的if判断 4. Linux中 > ...
最新文章
- 在浏览器中进行深度学习:TensorFlow.js (四)用基本模型对MNIST数据进行识别
- 前、后端分离权限控制设计和实现思路
- 华为 Java 编程军规
- CCF201612-4 压缩编码(100分)
- yum -y --downloadonly --downloaddir=/ruiy upggrde;
- ubuntu 无法进入startx_Ubuntu无法进入图形化界面(报错/dev/sda1:clean的解决)
- Centos: 解决系统编码 locale 的报错 LC_CTYPE / LC_ALL 问题
- Java对象转换成JSON对象/JSON对象转换成JSON字符串/JSON字符串转换成JS对象
- linux mysql5.6.27源码安装和错误解决
- 披荆斩棘的北森,乘风破浪的HR SaaS
- 集成Tomcat环境到Eclipse中
- 没有对应的Id ,报空指针异常
- Unity 之 官网下载地址,方便各个版本的 Unity 安装包下载
- android小米手机变慢,小米安卓系统手机上网速度慢的解决方法
- 支付宝新农合缴费显示服务器,支付宝新农合缴费怎么交
- fbx sdk android,FBX SDK环境配置
- Word中将一级标题设置为段前一行与段后一行时,不显示段前一行怎么办?
- 三个故事,说穿了许多人
- BetaFlight模块设计之八:GPS任务分析
- python计算在险价值_VaR - 风险价值 - 蒙特卡罗法 - Python
热门文章
- 基于javaweb(springboot+mybatis)宠物医院预约管理系统设计和实现
- android广播注册源码,android 广播源码简要分析-注册
- MySQL查询语句转postGRE语句_PostgreSQL DBA常用SQL查询语句
- ucache灾备云报价_UCACHE灾备云功能
- file数组 删除文件_java编程IO基础之一:File类
- mysql数据库(1):连接与断开服务器
- 【课题报告】OpenCV 抠图项目实战(10)PyQt5 使用
- linux下sqlmap安装教程,(转)Sqlmap官网下载与安装教程[windows/linux版本]
- linux安装 中文乱码怎么解决方法,Linux安装GBK/GB2312程序显示乱码的五种解决方法...
- linux cat cd,linux 文件系统命令 cat cd chmod