网站建设地址 北京,wordpress 获取文章图片标题,网页设计案例,彩票计划网站开发文章目录 引言sed用法详解在文本中定位打印文本替换文本删除文本新增文本 结语 引言
在日常工作学习中我们都会遇到要编辑文本的场景#xff0c;例如我们要用vim或者nano等命令去编辑代码#xff0c;处理文本文件等#xff0c;这些命令的特点都是需要我们进行交互式的实时处… 文章目录 引言sed用法详解在文本中定位打印文本替换文本删除文本新增文本 结语 引言
在日常工作学习中我们都会遇到要编辑文本的场景例如我们要用vim或者nano等命令去编辑代码处理文本文件等这些命令的特点都是需要我们进行交互式的实时处理但是如果我们需要在shell脚本去完成一些文本编辑处理那该怎么办呢 接下来就介绍一下sed命令sed命令提供了处理文本的能力包括编辑、删除文本等我们可以利用sed命令在shell脚本中二次处理文本。
sed用法详解
其实sed命令功能是比较强大的他本身也是一个脚本解释器我们可以将sed指令编写成脚本文件只需要在脚本文件的第一行声明#!/bin/sed即可这种使用方式是在我们要处理较为复杂的任务时才会用到。 其实博主最常用的方式还是把sed当作命令来处理一些简单的文本操作在本篇文章中介绍的用法都是把sed当作命令来使用具体的sed脚本的编写如果有同学感兴趣再专门介绍吧。 首先sed命令的用法如下
# option 可选参数用来控制sed行为
# command 子命令下面会详细介绍
# inputfile 可以是文件或者是输入流
sed [option] command inputfileoptions选项如下做了解即可
选项说明-n取消默认输出。-e允许执行多个脚本。-f从脚本文件中读取命令。-i直接修改原始文件。-l指定行的长度。-r在脚本中使用扩展正则表达式。-s默认情况下sed将把命令行指定的多个文件名作为一个长的连续的输入流。而GNU sed则允许把它们当做单独的文件这样的话正则表达式不进行跨文件匹配。-u最低限度的缓存输入与输出。
command子命令
命令说明a新增 a 的后面可以接字串而这些字串会在新的一行出现(目前的下一行)c取代 c 的后面可以接字串这些字串可以取代 n1,n2 之间的行d删除因为是删除啊所以 d 后面通常不接任何参数i插入 i 的后面可以接字串而这些字串会在新的一行出现(目前的上一行)p打印亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行s取代可以直接进行取代的工作哩通常这个 s 的动作可以搭配正则表达式例如 1,20s/old/new/g 就是啦
在文本中定位
把大象放进冰箱一共分3步的梗大家应该都听说过其实sed命令的使用也是类似的使用sed命令只有2步第一步 定位我们要编辑的行第二步 编辑它。 再sed中定位文本行有两种方式 方式一使用行号定位 使用行号定位是指我们清楚的知道我们要处理哪一行例如有一个文本文件我们想在该文件的第1行加一些备注说明或者我们想删除该文件的第3行这种情况下我们可以使用行号直接定位。示例如下 首先我们提前准备一个fruit.txt 文本文件作为实验文件后面的示例都会使用这个文件文件内容如下 然后我们使用sed命令打印第一行打印命令下面会介绍这里主要演示行号定位如下
# -n 是取消默认输出sed命令默认会将源文件内容都打印出来
# 1p 代表打印第一行p是打印的意思后面会讲到
sed -n 1p fruit.txt结果如下 我们也可以打印连续的几行如下
sed -n 2,3p fruit.txt结果如下可以看到打印了第二和第三行
方式二 使用正则表达式定位 使用正则表达式定位需要我们对正则表达式有一定的了解正则表达式是一种功能强大的按规则匹配字符串的工具网上教程都比较丰富这里就不在赘述。 sed命令也支持正则表达式来定位我们要操作的文本行例如我们要操作包含有关键字‘abc’的行但是我们不知道是哪一行就可以用正则表达式定位正则表达式定位需要将表达式放在 / / 之间示例如下 我们打印带有关键字‘an’的行
# 将正则表达式‘an’用/包裹起来 p代表打印
sed -n /an/p fruit.txt结果如下可以看到打印了orange和banana
打印文本
打印文本的子命令是p 其实在上面将文本定位时候的示例都使用到了这个功能这里就不重复演示了这个功能主要是帮助我们打印我们想要的行然后为下一步做准备。
替换文本
替换文本的子命令是s ,sed可以帮我们在文本内全局或者局部替换文本例如我们想将某些单词转为大写。 示例如下我们将fruit.txt文件中的an全部换成大写的AN
sed -n s/an/AN fruit.txt注意
这里的替换并不会回写到源文件中sed将an替换为AN之后默认写入输出流里了如果没有后续处理那么就会直接打印到终端。
删除文本
删除文本的子命令是d可以删除我们不需要的行示例如下
删除fruit文件第一行
sed 1d fruit 结果如下 2. 删除带关键字‘an’的行这里使用正则定位然后删除
sed /an/d fruit.txt结果如下banana和orange都被删除了
新增文本
新增文本行的子命令有两个a 和 i其中 a代表在指定位置的后面追加appendi代表在指定位置前插入insert。示例如下
我们在fruit.txt文件第二行后面追加一行grape 如下
sed 2 a grape fruit.txt结果如下
在最后一行的前面插入cherry 如下
sed $ i cherry fruit.txt结果如下
注意
sed对文本的修改都不会回写到原文件里而是写入到了输出流默认就是终端所以sed命令并不会破坏原来的文件
结语
sed命令其实还有很多用法这里都没有列出来只是挑了一些博主认为常用的功能介绍如果感兴趣可以通过 man sed命令查询最全的使用说明。