Linuxshell

【现学现忘&Shell编程】— 35.sed命令(一)

2020-10-23  本文已影响0人  繁华似锦Fighting

1、sed命令说明

sed主要是用来将数据进行选取、替换、删除、新增的命令,grepawksed称为是文本操作三剑客。

我们看看sed命令的语法格式:

[root@localhost ~]# sed [选项] '[动作]' 文件名

选项:

动作:

提示:

对于sed命令大家要注意,sed所做的修改并不会直接改变文件的内容(如果是用管道符接收的命令的输出,这种情况连文件都没有),而是把修改结果只显示到屏幕上,除非使用-i选项才会直接修改文件。

小说明:

vim可以直接修改文件内容,我们使用的也非常多,为什么还要学sed命令呢?

因为vim需要我们手动和计算机交互,需要手动输入一些编辑指令,保存指令,切换模式指令等,才能完成vim的编辑操作。

在Shell中很难做到人机交互,所以vim操作没有办法在Shell程序使用,因此要通过sed命令来完成,这是Shell中修改文件内容最最最主要的方式。

2、行数据操作

使用如下文本student.txt

ID      Name    Python  Linux   MySQL   Java
1       Tangs   88      87      86      85.55   
2       Sunwk   99      98      97      96,66   
3       Zhubj   77      76      75      74.44   
4       Shahs   66      65      64      63.33 

(1)查看文件中的数据

我们举几个例子来看看sed命令到底是干嘛的。

查看下student.txt文件的第二行,那么就可以利用p动作,执行如下命令:

[root@localhost tmp]# sed '2p' student.txt 
ID  Name    Python  Linux   MySQL   Java
1   Tangs   88      87      86      85.55
1   Tangs   88      87      86      85.55
2   Sunwk   99      98      97      96.66
3   Zhubj   77      76      75      74.44
4   Shahs   66      65      64      63.33

从上面的结果可以看出,p命令确实输出了第二行数据,但是sed命令还会把所有数据都输出一次,这时就会看到这个比较奇怪的结果,第二行的数据有两次的输出。

那如果想指定输出某行数据,就需要-n选项的帮助。

[root@localhost tmp]# sed -n '2p' student.txt 
1   Tangs   88  87  86  85.55

(2)删除文件中的数据

删除student.txt文本中第二行到第四行的数据,命令如下:

[root@localhost tmp]# sed  '2,4d' student.txt 
ID  Name    Python  Linux   MySQL   Java
4   Shahs   66      65      64      63.33

2,4表示删除2至4行的数据。

但是这里要注意的是,我上边的操作,并没有写入到文件中,我们可以查看student.txt文本中的内容:

[root@localhost tmp]# cat student.txt 
ID  Name    Python  Linux   MySQL   Java
1   Tangs   88      87      86      85.55
2   Sunwk   99      98      97      96.66
3   Zhubj   77      76      75      74.44
4   Shahs   66      65      64      63.33

可以看到student.txt文本中的内容还在,sed命令只是在输出的时候,把数据过滤掉了。

如果需要在删除内容的同时,再写入文件,就需要-i选项了。

执行命令:

[root@localhost tmp]# sed -i '2,4d' student.txt就可以了。

(3)向文件中追加数据

需求:在student.txt文本中第三行后面添加66666666666666

执行命令如下:

[root@localhost tmp]# sed "3a 66666666666666" student.txt 
ID  Name    Python  Linux   MySQL   Java
1   Tangs   88      87      86      85.55
2   Sunwk   99      98      97      96.66
66666666666666
3   Zhubj   77      76      75      74.44
4   Shahs   66      65      64      63.33

同理,student.txt文本中的内容并没有被改变,如果需要改变student.txt文本中的内容,添加-i选项。

注意:sed命令的选项要写在单引号(双引号也可以)之外,如:

[root@localhost tmp]# sed -i "3a 66666666666666" student.txt

上一篇下一篇

猜你喜欢

热点阅读