菜鸟linux的sed,Linux sed命令菜鸟入门

本文首先以一个简单的sed命令应用示例,说明如何使用sed命令进行文本处理,接着从sed命令的用法、工作原理、行地址模式以及sed命令支持的脚本命令详细介绍sed命令的用法。

一个完整的sed命令使用简单示例

现在有一个待处理文件test.txt,文件中包含一系列的位图数据1和0,它们位于

之间,需要将它们写入一个单独的文件,并使用.FG .FE替换着部分内容。替换输入文件中的 标识为.LP并删除其下的空行。最后,删除输入文件中的所有空行。

处理文件内容如下:cat test.txt

This is a test paragraph.

111111111111111101000000000000000000000000000000111111111111111111100000000

000000000000000000000000000000000001111111111111111111111111111111111111111

11111111111111111110000000000000000000

MOre lines of text to be found after the figure.

These lines should print.

sed脚本命令内容及解释如下:cat sedscr

//{

N                     #读入下一行,因为下一行为空行,

c\                    #使用下面的内容替换模式空间中的内容,之所以使用N命令,也是想把下面的空行删除

.LP

}

/

/,/
/{      #匹配
行之间的内容

w fig.test                        #将这部分中的当前模式空间中的内容写入文件fig.test中,因为sed命令式按行读取文件内容的

/

/i\                  #在
行前插入下面的内容

.FG\

\

.FE

d                                 #删除匹配的行,即删除模式空间中的内容,这样模式空间中的这部分内容不会被输出

}

/^$/d                     #删除所有空行

sed脚本执行命令:sed -f sedscr test.txt

sed脚本执行完成后输出内容如下:

.LP

This is a test paragraph.

.FG

.FE

.LP

MOre lines of text to be found after the figure.

These lines should print.

上面简单演示了一个使用sed命令的实际例子,初学时看不懂没有关系,只需知道大概是这么个流程,然后下面会详细的解释sed命令的用法。

sed命令用法

sed[选项] {脚本 | 脚本文件} [输入文件],其中[ ]表示可选,{}表示必须。

首先将3个经常出现的选项解释如下:

-n, --quiet, --silent                          取消自动打印模式空间

-e 脚本, --expression=脚本          添加“脚本”到程序的运行列表

-f 脚本文件, --file=脚本文件         添加“脚本文件”到程序的运行列表

上面出现了sed命令的三个最基本最常见的参数选项,其意思如下表所示:

-n选项

抑制sed命令的默认输出

-e选项

后接单引号包含的命令脚本,仅应用单个命令于输入文件时适用

-f 选项

指定一个文件包含多个脚本命令

这几个选项的使用模式大致如下:

sed -n -e 'cmd_script' input_file           #注意,单引号扩住脚本命令

sed -f script_file input_file                    #将脚本命令写入一个单独的文件

其实,sed命令的选项并不是学习sed命令的主要内容,主要内容是对于sed命令脚本部分的学习。sed支持的脚本命令比较多,后面会详细介绍该部分内容,介绍sed支持的脚本命令之前,先介绍一下sed命令执行的原理。

sed工作原理

下面以sed -f script_file input_file为例,其工作原理如下图所示:

0_1330093890R5E5.gif

其中input_file表示处理文件,script_file表示脚本命令。

工作原理如下:

a) 首先将处理文件的第一行读入模式空间。

b) 接着对模式空间中的这一行内容执行脚本命令中设置的命令,从上至下依次执行脚本命令中设置的命令。

c) 脚本命令执行完成后,输出模式空间中的内容。

d) 清空模式空间中得内容,并读入处理文件中得第二行内容,并重复b) 和 c) 步骤的内容,直至处理完文件中的所有内容。

苦逼的码农可以查看图片右上角的伪代码,可能解释得更加清晰一点。

下面先对几个经常出现的名词进行解释:

模式空间

以上描述中出现了一个词叫模式空间,下面对其进行解释。由于sed命令的执行并不修改原始文件,也就是说输入文件是什么,执行完sed命令后,输入文件没有变化,这么说来,肯定不能在输入文件的基础上对其进行编辑,所以需要一块单独的空间,用于转存文件中得内容,然后进行处理并输出。模式空间就是这么一块转存输入文件内容的空间,并且sed命令一次读入输入文件中得一行内容到模式空间,使用sed命令支持的脚步执行处理完模式空间中得内容后,输出处理完的结果并删除模式空间中得内容,准备读入下一行输入文件中得内容。

多行模式空间

如上所述,模式空间每次读入输入文件中的一行进行处理,有时只读入一行内容到模式空间对输入文件的处理能力很有限,比如它很难处理一个在一行末尾处开始,并在下一行开始处结束的短语。而多行模式空间就是为了解决这个问题而提出的,他允许将模式空间中的内容从一行扩展到多行。具体内容在本文后面会有讲解。

保持空间

模式空间是容纳当前输入行的缓冲区,而保持空间是预留的一部分缓冲区,用于临时存储模式空间中的内容。模式空间中的内容可以复制到保持空间,保持空间中的内容也可以复制回模式空间。具体内容在本文后面会有讲解。

sed命令的行地址模式

为什么需要行地址模式呢?因为并不是输入文件中的每一行内容都需要被sed命令处理,sed命令当然只处理它感兴趣的部分,于是需要使用行地址模式对要处理的行进行控制。

行地址是由斜杠、行号或者行寻址符号扩住的正则表达式描述。sed命令可以指定 0 或者 1 或者 2 个地址,每个地址都是一个描述模式、行号或者行选址符号的正则表达式。

1. 如果没有制定地址,表示命令将应用于每一行。

2. 如果只有一个地址,表示命令将应用于与这个地址匹配的所有行。

3. 如果指定了由逗号分隔的两个地址,表示命令应用于匹配第一个地址的第一性和它后面的行,直到匹配第二个地址的行(包含此行)。

4. 如果地址后面跟有感叹号,表示命令将应用于不匹配该地址的所有行。

例:

a) [address]command

b) [line-address]command

c) address {

command1     #在command后面添加空格可能会产生意想不到的错误,建议每个command都单独一行

command2

command3

}  #右大括号必须单独位于一行

sed命令支持的脚本命令

sed命令所支持的脚本命令很多,常见的脚本命令有s、d、p、n、i、a、c、y等。其中还包括与多行模式空间相关的N、D、P命令(均大写)。与保持空间相关的h、H、g、G、x命令。

1. s命令(替换)

语法:[address]s/pattern/replacement/flags

解释:替换命令应用于与address匹配的行(address的匹配见行地址模式一节),如果没有指定address,就应用于与pattern匹配的所有行。

flags标注可能是以下几种情况中得一种:

g: 对模式空间中所有出现匹配的情况均进行替换。没有指定g时表示仅对第1次出现匹配的情况进行替换。

n: 1-512之间的一个数字,表示对当前模式空间中第n次出现所匹配部分的内容进行替换,其余所匹配部分的内容不变。

p: 打印模式空间中的内容。

w file: 将模式空间中的内容写入file中。

换行符在计算机内部只是一个字符,所有正则表达式可以使用"\n"来匹配换行符。

replacement部分,下列字符具有特殊含义:

&:  用正则表达式匹配的内容进行替换。

\n: 匹配第n个子串,这个子串以前在pattern中使用"\("和"\)"指定。

\:  转义字符,如上所述的&字符,在replacement中出现是就需要使用转义字符。

例:

s/UNIX/\\s-&\\s0/g脚本将 on the UNIX OS 替换为 on the \s-UNIX\s0 OS,其中UNIX为正则表达式匹配的内容,替换replacement中的&字符。其中第一个"\"字符为转义字符。

s!/usr/mail!/usr2/mail!g    #定界符并不一定必须是"/",也可以选择其他字符,如本例中使用"!"作为定界符。

有一个test.txt文件内容为first:second,现在想要将first和second替换位置。可以使用如下命令实现:

sed -e 's/\(.*\):\(.*\)/\2:\1/' test.txt    #"\("、"\)"在pattern中指定了两个子串,"\1"、"\2"表示匹配第1个和第2个子串。

2. d命令(删除)

待续......

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

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

相关文章

三星s10能升级android11,三星 S10+手机已在测试 Android 11 系统

IT之家2月25日消息 谷歌本月初发布了首个Android 11开发者预览版,首先面向Pixel手机,不过看起来三星已经在Galaxy S10 手机开始测试最新系统。IT之家从Geekbench数据库中获知,上面出现了运行Android R,型号为SM-G975F的三星Galaxy…

android 5. 蓝牙 mesh,蓝牙mesh组网

智能照明是智能家居的一个重要入口,传统照明方案存在布线复杂,控制单一等问题。搭配飞易通MESH组网模组替换传统方案,无需额外的布线。提供更智能的控制,更极致的用户体验。一、MESH应用领域:蓝牙5.0MESH是由SIG蓝牙联盟发布建立的…

android opencv 银行卡识别,NDK 开发之使用 OpenCV 实现银行卡号识别

前言在日常的开发中,我们有时会遇到添加银行卡的需求,这时候,产品可能会让你仿一下支付宝之类的相机扫描识别银行卡号。很多时候,做这样的需求会去找找稳定的第三方,本文通过 OpenCV 结合识别的需求带你分析如何实现银…

鸿蒙测试机型微博,华为多款机型开启鸿蒙尝鲜:微博已适配HarmonyOS小尾巴

日前,华为已经正式宣布,将于6月2日晚20点召开鸿蒙操作系统及华为全场景新品发布会,届时将正式发布鸿蒙OS正式版。同时,今天华为还开启了鸿蒙OS首批消费者尝鲜计划,其中正式版可参与机型包括Mate 40系列、Mate X2、Mate…

android今日头条刷新,仿今日头条刷新vector动画

一般的刷新动画是一个圈圈在转,而头条的比较特殊,直接上写好的效果图(一直不知道怎么把图片尺寸调小o(╯□╰)o)吧~刷新动画_.gif首先整个效果是通过SVG和vector来实现的,如果不是很了解,请看大佬的文章:SVG学习--Anim…

在html中标题字号一共有几种,HTML中常用的几种标签

在HTML中,标签是首要的,也是最重要的东西。一旦进入HTML,认识和理解标签是基本的需要,因为这是区分HTML代码与普通文本的分隔符。这些标签是用来显示文档中的普通文本或转化文本的指令的标签。什么是转化后的文本?要显…

html静态页面引用其他页面,Shtml完美解决静态页面内部调用其他页面(非Iframe、Object、Js方法)...

我想这个是所有前端工程师都会碰到的问题,在你做了很多页面,需要调用同一个头部或者底部的时候,需要嵌套一下,这个时候怎么办Iframe、Object、Js调用的方法就不讨论了,网上搜索一大堆,不过兼容性不好这里给…

鸿蒙手机如何录屏,安卓手机如何屏幕录制视屏?手机视频录制方法

安卓手机如何屏幕录制视屏?手机视频录制方法2018年12月17日 17:05作者:黄页编辑:黄页分享随着科技的不断进步发展,手机已经成为人类不可缺少的一种生活神器,人们已经不满足只是用来打打电话、发发短信那么简单了,手机的用途主要用来社交、娱乐…

html判断为空的函数,javascript怎么判断是否为空字符串?

JavaScript中可以使用if(typeof obj"undefined"||objnull||obj"")语句通过判断字符串的数据类型来判断字符串是否为空。判断字符串是否为空的方法函数:function isEmpty(obj){if(typeof obj "undefined" || obj null || obj "…

et200sp模块接线手册_西门子PN/PN耦合器学习应用系列(1)-外观及接线

早在2017年我曾写过两篇文章介绍西门子PN/PN耦合器,文章链接如下:初识西门子PNPN耦合器(PN/PN Coupler);如何在博途(TIA Portal)环境下组态PNPN耦合器?当时PN/PN耦合器的固件版本还是V3.x。随着产品的升级,新版本的PN/…

js 条码枪扫描_年会展台 精彩不断 | 沧田:从打印到扫描录入 国产品牌从未停止...

11月23日-25日,中国现代办公行业年会(以下简称COAA年会)在南昌召开。今年对于OA行业而言,国产品牌的崛起成为主要特征之一。以针式打印机起家的沧田,在本次展会中展示了多款重量级产品,涵盖了针式打印机、激光一体机、条码打印机、…

投后管理岗面试_2020天津水务招79人,管理岗+操作岗,专科起报

Hello大家好,我们今天的国企招聘主要说的是天津水务。天津水务的公告和去年相比晚了几个月,而且要求也变了一些——变成了校招(要求2020年应届生),虽然条件还是不高——大专起报。2点要求基本的条件就是要求&#xff1…

微信没有回车键怎么换行_在东平相亲网加了心仪对方的微信,但是没有话题怎么办?...

最近很多东平单身小伙伴问红娘:加了对方微信不知道聊什么,觉得两个人没有共同话题,而且感觉该聊的都聊了,每天早晚安也发了,够热情了。还有的说不知道怎么回信息或者不知道跟ta说什么话题该怎么办?1其实这些…

中国重汽微服务管理_springcloud微服务架构实战:商家管理微服务设计

商家管理微服务设计商家管理微服务是一个独立的RESTAPI应用,这个应用通过接口服务对外提供商家信息管理、商家权限管理和菜单资源管理等方面的功能。商家管理微服务开发在merchant-restapi模块中实现,有关这一类型模块的依赖引用、配置、启动程序的设计等…

html文字竖直书写,css 文字竖直居中的写法和图片垂直居中代码(图文)

界面上文章左右居中使用text-aligin:center,上下竖直居中的写法如下,图片垂直居中的代码文字、图片居中显示的方法.content{height: 40px;line-height: 40px;border:1px double #abc;}.myimg{/*非IE的主流浏览器识别的垂直居中的方法*/display: table-ce…

怎么判断到了月初_双春年与无春年怎么区分?2021年是寡妇年吗?

导读:双春年与无春年怎么区分?2021年是什么春年?就在昨天,我写了一篇关于寡妇年的文章,没想到大家热情高涨,关注度挺高的,还有的朋友私信问我这个双春年、有春年和无春年该怎么分,今…

乐橙本地录像回放不了_乐橙智能锁来告诉你:你家门真的安全吗?

你家门锁真的安全吗?你以为家门反锁就没事了?最近,看到一则新闻:女主人反锁门后出门喝喜酒,回家后发现家中遭窃,现金、珠宝首饰等全部遗失。还有那些专门行窃的小偷,他们会先按下房间门铃&#…

swift html编辑器,SwiftUI 的可视化编辑工具

原标题:SwiftUI 的可视化编辑工具作者:希德,iOS 开发者,前“有经验的前端开发工程师”,就职于网易严选。正在写书《Thinkable SwiftUI》(严重拖稿中)Session 10185: https://developer.apple.com/videos/play/wwdc2020…

如何备份数据_如何通过归档、备份和灾难恢复实现多云数据保护

点击上方“蓝色字体”,选择 “设为星标”关键讯息,D1时间送达!为了提高业务连续性并更好地控制成本,企业将在2020年向IT专业人员施加压力,要求他们打破内部和外部基础设施之间以及公共云提供商离散环境之间的孤岛。为此…

清华大学计算机专业高中选课系统,【清华大学计算机实验教学中心】_清华大学计算机实验教学中心...

计算机实验教学中心面向全校所有专业本科生开课,每年开出计算机实验教学课超过7000人门,完成实验学时数逾750000.计算机学科是一门理论与实践结合得非常紧密的学科,因此实验教学中心的教学指导小组在教学实践中归纳出一套计算机学科特有的实验教学模式:除了独立设置的部分专题实…