shell-对文件的操作

一、简介

在shell脚本编写中,时常会用到对文件的相关操作,比如增加内容,修改内容,删除部分内容,查看部分内容等,但是上述举例的这些操作一般都是需要在文本编辑器中才能操作,常用的文本编辑器如:gedit、vim、nano等又是交互式文本编辑器,脚本无法自己独立完成,必须有人参与才可以完成。如果这样的话又违背了我们编写脚本的意愿(全部由机器来完成,减少人的工作压力,提升工作效率)。emm….如何才能让这些操作全部脚本自己就搞定,而不需要人的参与,而且又能按照我们的脚本预案来完成呢?

为了解决上述问题,linux为大家提供了一些命令,比如Perl、sed等命令,今天我就着重为大家介绍一下sed命令。

二、sed命令

sed是linux中提供的一个外部命令,它是一个行(流)编辑器,非交互式的对文件内容进行增删改查的操作,使用者只能在命令行输入编辑命令、指定文件名,然后在屏幕上查看输出。它和文本编辑器有本质的区别。

区别是:
文本编辑器: 编辑对象是文件
行编辑器:编辑对象是文件中的行

也就是前者一次处理一个文本,而后者是一次处理一个文本中的一行。这个是我们应该弄清楚且必须牢记的,否者可能无法理解sed的运行原理和使用精髓。

2.1)sed数据处理原理

2.2)sed命令

sed 命令

语法:

sed [options] ‘{command}[flags]’ [filename]

2.2.1)sed内部命令说明

演示实例文档

文件内容增加操作,将数据追加到某个位置之后,使用命令a。

演示案例

文件内容增加操作,将数据插入到某个位置之前,使用命令i。

演示案例

文件内容修改操作—替换,将一行中匹配的内容替换为新的数据,使用命令s。

演示案例

文件内容修改操作—更改,将一行中匹配的内容替换为新的数据,使用命令c。

演示案例

文件内容修改操作—字符转换,将一行中匹配的内容替换为新的数据,使用命令y。

演示案例

文件内容删除,将文件中的指定数据删除,使用命令d。

演示案例

文件内容查看,将文件内容输出到屏幕,使用命令p。

演示案例

2.2.2)命令选项说明

在命令行中使用多个命令 -e

从文件读取编辑器命令 -f 适用于日常重复执行的场景

抑制内存输出 -n

使用正则表达式 -r

从上述的演示中,大家可以看出,数据处理只是在缓存中完成的,并没有实际修改文件内容,如果需要修改文件内容可以直接使用-i命令选项。在这里我需要说明的是-i是一个不可逆的操作,一旦修改,如果想复原就很困难,几乎不可能,所以建议大家在操作的时候可以备份一下源文件。-i命令选项提供了备份功能,比如参数使用-i.bak,那么在修改源文件的同时会先备份一个以.bak结尾的源文件,然后再进行修改操作。

2.2.3)标志

数字标志:此标志是一个非零正数,默认情况下,执行替换的时候,如果一行中有多个符合的字符串,如果没有标志位定义,那么只会替换第一个字符串,其他的就被忽略掉了,为了能精确替换,可以使用数字位做定义。

g标志:将一行中的所有符合的字符串全部执行替换

p标志:打印文本内容,类似于-p命令选项

w filename标志:将修改的内容存入filename文件中

三、sed小技巧

$= 统计文本有多少行

最后更新于