Linux CentOS7sed的替换及逆转功能

news2024/12/25 0:27:45

在各项工作,需要大量的文本处理。有时,想把文件按行翻转一下,最后一行显示在第一行,倒数第二行显示在正数第二行,等等。这是行的逆转要求,可以通过命令tac对文件操作,达到目的;有时,想把一行内容按单词翻转一下,最后一个单词显示第一个位置,倒数第二个单词显示在正数第二个位置,等等。这是对单词的逆转要求,可以通过命令awk对行操作,达到目的;有时,想把一个单词或任意字符串按字符翻转一下,最后一个字符与第一字符对换,等等。这是对字符的逆转要求,可以通过命令rev对字符串操作,达到目的。

本文针对这三类要求,通过sed流编辑器,进行操作处理,达到翻转、调换的功能。主要借助s替换操作、G、D等命令完成。

一、替换功能

sed重要作用体现在其强大的替换功能上。

仅举简单而典型的几例为证。

1.字符串间加空格

        echo 12345|sed 's/./& /g'

2.字符串反向输出

        echo abc|sed -r 's/(.)(.)(.)/\3\2\1/'

3.字符串按列输出

        echo ABCD|sed 's/./&\n/g'

4.字符串由列转行(有空格)

        seq 4|sed ':a;N;s/\n/ /g;ba'

5.字符串由列转行(无空格)

        seq 4|sed ':a;N;s/\n//g;ba'

二、逆转功能

我们对文本文件的递转操作有三类:字符串或单词反向输出、行内单词的反向输出和文件的反向输出。其中两个常用命令rev和tac,可以完成字符串反向输出(rev)、文件的反向查看输出(tac)。工作中可以用此完成小目标。

本文的学习与讨论更多地是知识的扩展与思维的发散!

1.单词按字符逆转

a.字符左取右放

需求:将centos7 反向输出 :7sotnec

方法:echo 'centos7'|sed –r '/\n/!G;s/([^ ])(.*\n)/&\2\1/;//D;s/\n//'

([^ ])可以用(.)代替。命令执行过程在后面阐述!

列出另一种处理方法(理解即可)

        echo 12345 |sed -r 's/.*/&\n/g;:a;s/(.*)(.)\n(.*)/\1\n\3\2/g;ta;s/^\n//g'

b.字符由行变列

(1)tac  tr

字符串变成1列,用tac反转,再由列变为行

        echo 'linux'|sed 's/./&\n/g'|tac|tr -d "\n"

(2)tac  xargs

        echo 'unix'|sed 's/./&\n/g'|tac|xargs |sed 's/ //g'

(3)tac

        echo 'win'|sed 's/./&\n/g'|tac|sed ':a;N;s/\n//;ba'

(4)sed

        echo 123456|sed 's/./&\n/g'|sed $'x;H;$!d;${x;s/\\n//g;}'

2.行按单词逆转

a.常用命令组合实现

        echo {1..5}|xargs -n1|tac|xargs

        echo "I love study"|xargs -n1|tac|xargs

b.sed实现

        echo "I love linux !"|sed –r '/\n/!G;s/([^ ]* )(.*\n)/&\2\1/;//D;s/\n/ /'

命令解析:此方法关键在D参数。

有大写的N P D G H等命令,表示命令执行在多行模式空间中,与单行模式空间(默认的模式空间)有许多不同:

正常情况下,sed读取文件一行内容,在缓冲区(称为模式空间)中按sed命令顺序对文件的行进行文本处理。当使用n或N命令时,sed流编辑器会读取两行(或循环读取多行),一起处理。此时有别于单行模式空间,称为多行模式空间。

D命令就是删除多行模式空间中的第一行。如果D删除后,多行模式空间中还有剩余行,则返回D之前的命令(指D命令前的、' '中的第一条命令),重新执行;如果D删除后,(一般,此时多行模式空间转为单行模式空间)中没有任何内容,则将退出sed命令,将控制权交给sed流编辑器,在没有-n参数时,sed会输出模式空间中的内容。

D命令会引起循环,如果D被执行,那么D后面的命令是不会被执行的。

//是一种简写,表示与前面匹配一样,省略了匹配的内容。

sed命令执行过程

各命令由分号;分开。从左向右顺序执行(有循环会打断命令的顺序)。

第一次执行“/\n/!G”命令,因没有\n换行符,要执行G,因为保留空间中为空,所以在模式空间追加一空行,此时单行模式空间变为多行模式空间,其空间内容为:

多行模式空间第一行:I love linux !\n

多行模式空间第二行:\n

然后,执行后面的替换“s/([^ ]  )(.*\n)/&\2\1/”

多行模式空间第一行:I love linux !\n

多行模式空间第二行:love linux !\nI \n

执行“//D”//匹配(第一行替换执行到第二行)成功,执行D删除多行模式空间第一行。成功执行D命令,将检查多行模式空间中的内容:有内容,意味着开始循环过程,重新执行前面的命令(仍然从第一条命令开始执行);没有内容,执行D后命令。此时多行模式空间的情况是:

love linux !\nI \n(\n是换行符)

多行模式空间第一行:love linux !\n

多行模式空间第二行:I \n

因为还有内容,返回前面命令

第二次执行"/\n/!G"命令,因第二行有\n不执行,内容不变

执行后面的替换“s/([^ ]  )(.*\n)/&\2\1/”

多行模式空间第一行:love linux !\n

多行模式空间第二行:linux !\nlove I\n

再次执行“//D”……

后面过程与前面基本一致,不再重复。

……

最后一次执行"/\n/!G"命令,因有\n而不执行,内容不变

多行模式空间第一行:!\n

多行模式空间第二行:linux love I \n

执行后面的替换“s/([^ ]  )(.*\n)/&\2\1/”因为!后面没有空格所以不匹配,不执行

执行“//D” //不匹配,不执行D删除

此时多行模式空间结束循环,执行后面命令:“s/\n/ /”

!\nlinux love I\n执行替换操作,最后结果:

! linux love I

3.文件按行逆转

tac命令:是将cat反写过来,他的功能就跟cat相反,cat是由“第一行到最后一行连续显示在屏幕上”,而tac则是“由最后一行到第一行反向在屏幕上显示出来”,可以自定义分割符号进行反转tac -s " " 若不自定义分割符,默认为“\n”。

利用sed流编辑器,同样可以实现文件反向输出。

准备素材

        sed '2,$G;h;$!d' filename

        sed -n '1h;1!G;$!x;$p' filename

        sed -n '1!G;h;$p' filename

小结

sed流编辑器功能强大,只有多通过项目训练,才能深入理解,应用时才能得心应手。

掌握多行模式空间的运用,才是真正达到sed的高级应用水平的最佳途径。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/947882.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

百望云产业链图谱引领数字变革 赋能企业高价值数字资产管理

全球经济相互依存度增加,技术进步的速度越来越快,市场竞争日益激烈……这些因素共同塑造了一个复杂多变、不确定性极高的商业环境。在当今风云变幻的经济格局和市场波动不断的大背景下,众多企业们面临着如何利用海量数据赋能业务决策的挑战和…

0829【综述】面向时空数据的区块链研究综述

摘要:时空数据包括时间和空间2个维度,常被应用于物流、供应链等领域。传统的集中式存储方式虽然具有一定的便捷性,但不能充分满足时空数据存储及查询等要求,而区块链技术采用去中心化的分布式存储机制,并通过共识协议来保证数据的安全性。研究现有区块链1.0、2.0和以Block-DAG为…

Java--输入(格式化)输出

1、读取输入 要想通过控制台进行输入,首先需要构造一个与“标准输入流”System.in关联的Scanner对象。 import java.util.*; // Scanner类定义在java.util包中 ​ Scanner in new Scanner(System.in); java.util.Scanner Scanner(InputStream in) 用给定的输人流…

CSDN每日一练 |『清理磁盘空间』『奇偶排序』『编号分组』2023-08-30

CSDN每日一练 |『清理磁盘空间』『奇偶排序』『编号分组』2023-08-30 一、题目名称:清理磁盘空间二、题目名称:奇偶排序三、题目名称:奇偶排序四、题目名称:编号分组 一、题目名称:清理磁盘空间 时间限制:1…

e与phi不互素的情况

情况一:e较大且与(p-1)或(q-1)中任意一个不互素 例题:moeCTF2022---Signin 题目源码: from Crypto.Util.number import * from secret import flag mbytes_to_long(flag) pgetPrime(512) qgetPrime(512) print(p,p) print(q,q) np*q e65537…

DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION 论文精读笔记

DEFORMABLE DETR DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION 参考:AI-杂货铺-Transformer跨界CV又一佳作!Deformable DETR:超强的小目标检测算法! 摘要 摘要部分,作者主要说明了如…

Mybatis1.8 删除一行数据

1.8 删除一行数据 1.8.1 编写接口方法1.8.2 编写SQL语句1.8.3 编写测试方法 如上图所示,每行数据后面都有一个 删除 按钮,当用户点击了该按钮,就会将改行数据删除掉。那我们就需要思考,这种删除是根据什么进行删除呢?是…

HttpClient 绕过证书验证- sun.security.validator.ValidatorException: PKIX

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 问题 package com.example.demo.test;import com.alibaba.fastjson2.JS…

MySQL的备份与恢复以及日志管理

目录 一、数据备份的重要性 二、数据库备份的分类 1、物理备份 2、逻辑备份 (1)完全备份:每次对数据进行完整的备份 (2)差异备份:备份自从上次完全备份之后被修改的过文件 (3&#xff09…

优化爬虫请求:如何选择合适的爬虫ip轮换策略?

在进行爬虫任务时,使用隧道爬虫ip并采用合适的轮换策略可以提高稳定性和效率。选择合适的隧道爬虫ip轮换策略可以优化您的爬虫请求过程。 1、考量目标网站特点 不同网站对于频繁请求可能有不同限制或反爬机制。 了解目标网站是否存在IP封禁、验证码等问题&#xff…

初创公司如何选择小型办公室

初创公司寻找小型办公室时,有多种选择。不同的办公室类型具有不同的租金成本、交通便利程度和对公司发展的影响。本文将比较几种不同的小型办公室,为初创公司提供选择建议。 共享办公空间 共享办公空间是一种适合初创公司和自由职业者的办公室类型。这种…

Mybatis1.10 Mybatis参数传递

1.10 Mybatis参数传递 1.10.1 多个参数1.10.2 单个参数 Mybatis 接口方法中可以接收各种各样的参数,如下: 多个参数单个参数:单个参数又可以是如下类型 POJO 类型Map 集合类型Collection 集合类型List 集合类型Array 类型其他类型 1.10.1 …

Kubernetes技术-Kubernetes集群环境搭建准备

1.搭建环境规划 在搭建k8s的时候可以分为两种: 单master集群,故名思意,只有一个master管理节点和多个node节点。如下图所示: 多master集群,故名思意,有多个master管理节点和多个node节点。如下图所示: 2.服务器硬件要求 (1).测试环境要求(教学、研究等环境) Master节点:至…

《Kali渗透基础》15. WEB 渗透

kali渗透 1:WEB 技术1.1:WEB 攻击面1.2:HTTP 协议基础1.3:AJAX1.4:WEB Service 2:扫描工具2.1:HTTrack2.2:Nikto2.3:Skipfish2.4:Arachni2.5:OWAS…

YOLOv5 7.0添加ACmix

ACmix 论文地址:On the Integration of Self-Attention and Convolution ACmix探讨了卷积和自注意力这两种强大技术之间的关系,并将两者整合在一起,同时享有双份好处,并显著降低计算开销,可助力现有主干涨点&#xff…

php对接AWS S3云存储,上传S3及访问权限问题

首先先下载sdk包 https://docs.aws.amazon.com/zh_cn/sdk-for-php/v3/developer-guide/getting-started_installation.html S3创建存储桶 去安全凭证-》创建访问秘钥 创建的时候会提示,主账号创建不安全,这个时候我们需要创建一个IAM账号来创建秘钥 创…

ES6中的箭头函数(arrow function)与普通函数的不同之处

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 语法简洁⭐ 没有自己的this⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、…

可以翻页的电子画册制作指南

​电子画册是一种创新的方式,可以将传统的纸质画册转化为数字化的形式,并且具备翻页的功能。它不仅可以提供更好的阅读体验,还可以方便地分享给他人。 1.选择制作工具: 有许多在线平台和软件可以帮助你制作电子画册,比…

小程序数据导出文件

小程序josn数据生成excel文件 先从下载传送门将xlsx.mini.min.js拷贝下来,新建xlsx.js文件放入小程序项目文件夹下。 const XLSX require(./xlsx)//在需要用的页面中引入// 定义导出 Excel 报表的方法exportData() {const that thislet newData [{time:2021,val…

全球领先、柔性低功耗?京东方独家供应OPPO折叠屏,首发值得一试

京东方作为全球领先的显示技术创新企业,为OPPO提供的折叠屏手机和智能手表屏幕,拥有先进的技术和优质的显示效果。京东方的柔性折叠低功耗解决方案不仅能够实现屏幕的弯折,还能在折叠状态下保持低功耗,使设备的续航时间得到极大增…