sed交换任意两行
命令:
sed -n 'A{h;n;B!{:a;N;C!ba;x;H;n};x;H;x};p' 文件名
解释:
A、B分别是需要交换的行,C是B-1
其中,A、B、C可以是行号,也可以通过匹配模式,如果是匹配模式,C就需要自己替换为B行的上一行,类似:
sed -n '/xxx/{h;n;/zzz/!{:a;N;/yyy/!ba;x;H;n};x;H;x};p' 文件名
将包含xxx与zzz的行交换(zzz在xxx行之后),yyy是zzz行前面的那一行。
思路:
对于交换相邻的行
sed -n 'A{h;n;x;H;x};p'
对于交换不相邻的行
sed -n 'A{h;n;:a;N;C!ba;x;H;n;x;H;x};p'
对比发现:
:a;N;C!ba;x;H;n; 这个部分是多出来的,因此用 B!{..}把这个部分包围起来。
解释:
A{...} 遇到A行开始做序列命令
h 把A行放到hold space
n 读取一行并替换当前行
:a;N;C!ba 把B行之前的所有行读到pattern space中
x 交换一下,这里hold space 中是 A+1~B-1的内容,pattern space中是A行的内容
H 把A行添加到hold space中,此时,hold space中是A+1~B-1A
n 把B行读进pattern space中
x 交换一下,此时,hold space中是B行,pattern space中是A+1~B-1A
H 把A+1~B-1A添加到hold space中,此时,hold space中是 BA+1~B-1A
x 交换一下,此时pattern space中是 BA+1~B-1A
对于相邻行的情况
B!{:a;N;C!ba;x;H;n} 这个部分将不执行,因为n后,当前行号就是B,因此这个部分跳过。
示例:
sed -n '/<module>hps-home<\/module>/{h;n;/<module>hps-framework<\/module>/!{:a;N;/<module>hps-observer<\/module>/!ba;x;H;n};x;H;x};p' pom.xml
将pom.xml中<module>hps-home</module>行(这行在前)与<module>hps-framework</module>行(这行在后)交换位置并将交换后内容打印到标准输出(屏幕)上,其中<module>hps-observer</module>行是<module>hps-framework</module>前面的那行。
如果要修改pom.xml文件,可以使用:
sed -n '/<module>hps-home<\/module>/{h;n;/<module>hps-framework<\/module>/!{:a;N;/<module>hps-observer<\/module>/!ba;x;H;n};x;H;x};p' pom.xml >a.txt
cat a.txt >pom.xml
sed交换任意两行的更多相关文章
- sed将上下两行并列
#cat log5 mmmm 1234 nnnn 2344 #sed -n '{N;s/\n/\t/p}' log5 mmmm 1234 nnnn 2344
- 自己写一个swap函数交换任意两个相同类型元素的值 对空指针的使用 字节大小的判断(二)了解原理
验证的代码: #include <stdio.h> int main(){ char c = 'z'; ) + (c << ) + () + 'a'; printf(" ...
- CodeForces 221(div 2)
A 无trick水题... /* * Author: Plumrain * Created Time: 2013-12-24 22:26 * File Name: B.cpp */ #include ...
- noip2017考前整理(未完)
快考试了,把我以前写过的题回顾一下.Noip2007 树网的核:floyd,推出性质,暴力.Noip2008 笨小猴:模拟Noip2008 火柴棒等式:枚举Noip2008 传纸条:棋盘dpNoip2 ...
- HDU - 2819 Swap(二分匹配)
题意:交换任意两行或两列,使主对角线全为1. 分析: 1.主对角线都为1,可知最终,第一行与第一列匹配,第二行与第二列匹配,……. 2.根据初始给定的矩阵,若Aij = 1,则说明第i行与第j列匹配, ...
- CS229 斯坦福大学机器学习复习材料(数学基础) - 线性代数
CS229 斯坦福大学机器学习复习材料(数学基础) - 线性代数 线性代数回顾与参考 1 基本概念和符号 1.1 基本符号 2 矩阵乘法 2.1 向量-向量乘法 2.2 矩阵-向量乘法 2.3 矩阵- ...
- CS229 机器学习课程复习材料-线性代数
本文是斯坦福大学CS 229机器学习课程的基础材料,原始文件下载 原文作者:Zico Kolter,修改:Chuong Do, Tengyu Ma 翻译:黄海广 备注:请关注github的更新,线性代 ...
- Excel两行交换及两列交换,快速互换相邻表格数据的方法
经常使用办公软件的人可能有遇到过需要将Excel相邻两行数据相互交换的情况,需要怎么弄才最方便呢?您还是像大家通常所做的那样先在Excel文件相应位置插入一个新的空白行然后在复制粘贴数据然后删除原来那 ...
- 交换一个数字的任意两个位置,指定K次的最值
Anton has a positive integer n, however, it quite looks like a mess, so he wants to make it beautifu ...
随机推荐
- [C++]数据结构:线性表之顺序表
1 顺序表 ADT + Status InitList(SeqList &L) 初始化顺序表 + void printList(SeqList L) 遍历顺序表 + int ListLengt ...
- keytool命令的使用
## 打印所有证书指纹.如果是cacerts,则指本机安装的jdk的key store:如果是一个jks文件,则是其他key store keytool -list -keystore <cac ...
- Spring Boot设置定时任务
在 http://start.spring.io/ 中新建一个Group为com.zifeiy,Artifact为task的工程. 然后在TaskApplication中添加注释:@EnableSch ...
- Spring Aop(五)——给Advice传参
转发:https://www.iteye.com/blog/elim-2395337 5 给Advice传递参数 Advice除了可以接收JoinPoint(非Around Advice)或Proce ...
- 极客时间-左耳听风-程序员攻略-异步I/O模型和Lock-Free编程
异步 I/O 模型 异步 I/O 模型其中的设计模式或是解决方法可以借鉴到分布式架构上来. 史蒂文斯(Stevens)在<UNIX 网络编程>一书 6.2 I/O Models 中介绍了五 ...
- Flutter的布局方法
重点是什么? Widgets 是用于构建UI的类. Widgets 用于布局和UI元素. 通过简单的widget来构建复杂的widget Flutter布局机制的核心就是widget.在Flutter ...
- Linux 系统信息查询大全
Linux常用系统命令 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /etc/redhat-release ...
- fastadmin cms使用注意一
addon和application还有前端配置后还需要 注意表配置
- Linux 工作管理 (job control)
fg , bg 有时,命令需要很长的时间才能执行完成.对于这种情况,我们使用‘bg’命令可以将任务放在后台执行,而用‘fg’可以调到前台来使用. 我们可以通过‘&’在后台启动一个程序: fin ...
- The 2019 ACM-ICPC China Shannxi Provincial Programming Contest (西安邀请赛重现) J. And And And
链接:https://nanti.jisuanke.com/t/39277 思路: 一开始看着很像树分治,就用树分治写了下,发现因为异或操作的特殊性,我们是可以优化树分治中的容斥操作的,不合理的情况只 ...