bash编程之sed基础应用

简介:

基础定义:

sed:Stream EDitor,行编辑器,也就是说它一次只处理一行内容,但是它可以将文件中的每一行都读取到并且逐行进行处理(不会在原文件上直接改动哟),就是将数据进行替换、删除、新增、选取特定的行等功能哦!我们首先来了解一下sed的用法,再来聊它的用途好了。

sed[options] "script"FILE1 ...

例:只显示/etc/fstab文件中以#开头的行

     sed –n “/^#/p” /etc/fstab

参数选项:

-n:静默模式,即不输出模式空间中的内容,只显示被处理过的

-e:指定在一个命令行中使用多个script,格式为-e 'script1' -e 'script2'
-r:支持使用扩展正则表达式元字符(默认是基础正则表达式)
-f/path/to/sed_script:从文件中读取处理脚本,并执行;

1
2
3
4
5
例:
[root@station94 ~]# vimsed.script            #名称可以随便写
/^#/d                                        #删除以#开头的行
/^proc/r /etc/issue                    #在以proc开头的行后添加显示issue
[root@station94 ~]# sed -fsed.script /etc/fstab

221743896.png


对于sed而言:主要是由地址定界方式及处理命令组成;而sed地址定界的方式有以下几种:

start_line,end_line:指定行范围;如:1,3

start_line,/pattern/: 从当前行到第一次匹配到的行;如:1,/^#/
/pattern/:仅显示被模式匹配到的行;

注:在一个sed语句里面可以写多个编辑命令的,但是要用分号隔开!

1
例:sed –n ‘1,3p;6,7p’ /etc/fstab      #显示匹配到的1-3和6-7行内容。


sed的常用编辑命令:

  •  d: 删除

   例:删除/etc/fstab中所有以#开头的行和12-15行。

1
[root@station94~]# sed -e '12,15d'  -e '/^#/d'  /etc/fstab
  • a \text: 在符合条件的行后面添加指定内容;

例:在/etc/fstab文件中所有以#开头的行后添加The comment line字样

1
[root@station94~]# sed -e '/^#/a \ The comment line'  /etc/fstab


222052383.png

例:如何在/etc/fstab文件中所有以#开头的行后添加两行字符呢,如The comment line和The second line?

1
[root@station94 ~]# sed -e '/^#/a \Thecomment line.\nThe second line.'  /etc/fstab


222117568.png

看到了吧,这里在添加的内容中间使用"\n"能够完成换行实现多行同时附加哦!

  • i \text:在符合条件的行前面添加指定内容,在添加的内容中间使用"\n"也能够完成换行来完成多行同时附加。

  例:怎么实现在非#号开头的行前添加两行字符呢??

1
[root@station94 ~]# sed-e '/^#/!i \The frist line.\nThe second line.'  /etc/fstab


222236758.png


  • c\text: 将符合条件的行替换为指定的文本;

   例:将/etc/fstab文件中以#开头的部分的行号替换成/etc/fstab


222431783.png


  • r /path/to/somefile: 在符合条件的位置读入指定的文件

   例:将根目录下的hello文件内容附加到以UUID开头的行的后面进行显示

1
2
[root@station94~]# sed  '/^UUID/r /root/hello'  /etc/fstab
[root@station94~]# sed  '/^UUID/r hello'  /etc/fstab


222556907.png


  • w /path/to/somefile: 将符合条件的位置保存至指定的文件

   例:将/etc/fstab文件中以#开头的部分保存到hello文件中

1
[root@station94~]# sed -n  '/^#/w hello'  /etc/fstab


222631283.png


  • =:显示匹配到的行的行号

  例:将/etc/fstab文件中以#开头的部分的行号显示出来


222702585.png


查找替换

sed中的查找替换功能与Vim的查找替换功能相当类似,格式如下:

sed ‘s/要替换的内容/替换为的内容/g’

其中的”/”也可使用其他特殊字符,如@等等;

要替换的内容:可以使用模式;
替换为的内容:不可以使用模式但是可以引用,还可以使用&(被模式匹配到的所有内容);

   例:将which ls命令所的内容中/bin/ls 前的空白字符去掉?


222939370.png

注:例中的g叫做标志位又称修饰符,和Vim的一样,其中g表示全局替换;i表示查找时忽略大小写。


直接修改原文件内容(非常危险)

你以为sed只有这样的能耐吗?你错了,sed甚至可以直接修改原文件的内容,而不必使用管道命令或者重定向,不过,由于这个操作会直接修改原文件,所以你千万不要随便拿系统配置文件来开玩笑啊。

sed的-i选项直接修改原文件;

这个功能在有些时候可以给我们带来很大的帮助,举例说,如果你有一个100万行的文件,你要在第100-1000行加某个字符,此时使用vim可能会疯掉,因为任务庞大,那肿么办?就是用sed。通过查找替换的功能,你甚至不需要使用vim去修改。

总之,这个sed不错,所以要好好学习呦!以上只是基础部分总结,拓展部分还望大家自己搜查学习。




本文转自 z永 51CTO博客,原文链接:http://blog.51cto.com/pangge/1261827


相关文章
|
4月前
|
机器学习/深度学习 Unix Shell
Shell编程基础入门(Bash|变量与输入输出重定向2&1)
Shell编程基础入门(Bash|变量与输入输出重定向2&1)
69 0
|
10月前
|
Shell
【Shell编程】Shell中Bash变量-数值运算、运算符变量、测试和内容替换
【Shell编程】Shell中Bash变量-数值运算、运算符变量、测试和内容替换
56 0
|
10月前
|
Shell
【Shell编程】Shell中Bash变量-预定义变量
【Shell编程】Shell中Bash变量-预定义变量
71 0
|
10月前
|
Shell
【Shell编程】Shell中Bash变量-环境变量
【Shell编程】Shell中Bash变量-环境变量
56 0
|
10月前
|
机器学习/深度学习 Shell
【Shell编程】Shell中Bash变量-位置参数变量
【Shell编程】Shell中Bash变量-位置参数变量
54 0
|
10月前
|
Shell
【Shell编程】Shell中Bash变量-用户自定义变量
【Shell编程】Shell中Bash变量-用户自定义变量
49 0
|
10月前
|
缓存 Shell 开发工具
【Shell编程】Shell中Bash基本功能
【Shell编程】Shell中Bash基本功能
61 0
【Shell编程】Shell中Bash基本功能
|
机器学习/深度学习 存储 Shell
Linux Shell编程(2) - Bash 变量
1. Bash 变量的命名规则 变量名只能包含字母、数字、下划线 变量名不能以数字作为开头 变量名区分大小写 变量名长度不超过255个字符 变量名在有效范围内必须唯一
|
存储 Shell 测试技术
开始你的bash/shell脚本编程
原文链接 I love bash 对于我自己来说,学习新框架或技术的最佳方式是同时获得实践经验,在本文中,你将自己通过编写代码来学习shell脚本的基础知识!本文包含语法,shell脚本的基础知识到中级shell编程,通过这篇文章你可以学习shell的相关知识,并且通过shell来实现Unix/Linux之间的接口 1_qo-oir60xdhic3wjqpu64g 介绍 您可能已经多次遇到过“脚本”这个词,但脚本的的含义是什么意思呢?简单的来说,脚本是包含一系列要执行的命令。
1221 0