Linux之sed命令的使用

Linux系统维护过程中,常通过自动脚本来处理运维方面的工作,而作为运维最常用语言即SHELL来完成脚本。而涉及到替换时我们常使用SED来完成替换工作。

这里简单归纳一下SED的功能,以方便后续脚本中的应用

SED最基本的格式遵循以下形式:

sed [OPTION]...{script-only-if-no-other-script} [input-file]...

[OPTION]中常用的是-e -i

-e 表示被修改后的对象在命令行展示出来,但对象本身实际没有进行修改。你可以理解为仅展现修改后的效果。

-i 则直接替换被修改的对象,一旦修改无法回退。

我通过范例展示:

[[email protected] logs]# sed -e ‘s/kernel.shmmax = .*/kernel.shmmax = 123/‘ /etc/sysctl.conf
该命令执行后,在命令行显示kernel.shmmax被修改后的样子。
# Controls the maximum number of shared memory segments, in pages
kernel.msgmnb = 6553600
kernel.msgmax = 6553600
kernel.shmmax = 123
kernel.shmall = 2097152
kernel.shmmni = 4096
而实际查看的结果,说明该参数并诶有修改
[[email protected] logs]# grep ‘kernel.shmmax‘ /etc/sysctl.conf 
kernel.shmmax = 8589934592
当使用-i参数以后,该文件中相应的对象则直接被修改
[[email protected] logs]# sed -i ‘s/kernel.shmmax = .*/kernel.shmmax = 123/‘ /etc/sysctl.conf 
[[email protected] logs]# grep ‘kernel.shmmax‘ /etc/sysctl.conf 
kernel.shmmax = 123

以上是SED命令最基本的用法,现在我们在进阶讨论一下它的匹配功能

SED{script-only-if-no-other-script}中带匹配功能,可以是字符匹配,也可以是行匹配,具体用法如下

[[email protected] logs]# sed -e ‘/password/ s/include/exclude/g‘ /etc/pam.d/login 
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       include      system-auth
account    required     pam_nologin.so
account    include      system-auth
password   exclude      system-auth

可以看到匹配了password的行中的include被转化为了exclude,通过数值指定匹配的行

[[email protected] logs]# sed -e ‘1,6 s/include/exclude/g‘ /etc/pam.d/login 
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       exclude      system-auth
account    required     pam_nologin.so
account    exclude      system-auth
password   exclude      system-auth

有人问,如果我不想使用替换,想直接插入到指定的位置呢?

[[email protected] logs]# sed -e ‘5,6 iusername   exclude      system-auth‘ /etc/pam.d/login 
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       include      system-auth
account    required     pam_nologin.so
username   exclude      system-auth
account    include      system-auth
username   exclude      system-auth
password   include      system-auth

可以看到把引号中的s改为i,即为插入,上面的语句说明我在5和6行后分别插入一行语句。我现在要删除5,6两行记录

1 #%PAM-1.0
2 auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
3 auth       include      system-auth
4 account    required     pam_nologin.so
5 account    include      system-auth
6 password   include      system-auth
[[email protected] logs]# sed -e ‘5,6d‘ /etc/pam.d/login 
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       include      system-auth
account    required     pam_nologin.so

其它的匹配模式:

^锚地行的开始,$锚地行的结尾
[[email protected] logs]# sed -e ‘/^a/ s/include/exclude/g‘ /etc/pam.d/login 
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       exclude      system-auth
account    required     pam_nologin.so
account    exclude      system-auth
password   include      system-auth
[[email protected] logs]# sed -e ‘/h$/ s/include/exclude/g‘ /etc/pam.d/login 
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       exclude      system-auth
account    required     pam_nologin.so
account    exclude      system-auth
password   exclude      system-auth

匹配单个或多个任意字符

.单个非换行字符,*匹配多个任意字符(我这里试过锚定行首不成功),[]匹配字符或数值范围([^]与之相反表示不在范围内的),\(char\) 保存char的内容以供后续调用,&代替替换的内容 \<,\>锚定单词的开头和结尾,x\{2\},x\{2,\},x\{2,3\},分别为匹配X字符2次,至少匹配X字符2次,匹配X字符2到3次。
[[email protected] logs]# sed -e ‘/^a..h/ s/include/exclude/g‘ /etc/pam.d/login 
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       exclude      system-auth
account    required     pam_nologin.so
account    include      system-auth
[[email protected] logs]# sed -e ‘/a*h/ s/include/exclude/g‘ /etc/pam.d/login 
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       exclude      system-auth
account    required     pam_nologin.so
account    exclude      system-auth
password   exclude      system-auth
[[email protected] logs]# sed -e ‘/^a[a-z][a-z]h/ s/include/exclude/g‘ /etc/pam.d/login 
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       exclude      system-auth
account    required     pam_nologin.so
account    include      system-auth 
[[email protected] logs]# sed -e ‘/^[^b-st-z]..h/ s/include/exclude/g‘ /etc/pam.d/login 
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       exclude      system-auth
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth

[[email protected] logs]# sed -e ‘/^[^b-st-z]..h/ s/in\(clude\)/ex\1/g‘ /etc/pam.d/login 
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       exclude      system-auth
account    required     pam_nologin.so
[[email protected] logs]# sed -e ‘/^[^b-st-z]..h/ s/clude/ex&/g‘ /etc/pam.d/login 
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       inexclude      system-auth
account    required     pam_nologin.so
[[email protected] logs]# sed -e ‘/\<a.*h/ s/include/exclude/g‘ /etc/pam.d/login 
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       exclude      system-auth
account    required     pam_nologin.so
[[email protected] logs]# sed -e ‘/c\{2,\}/ s/required/unrequired/g‘ /etc/pam.d/login 
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       include      system-auth
account    unrequired     pam_nologin.so
时间: 2024-10-14 18:41:04

Linux之sed命令的使用的相关文章

关于linux中sed命令的简单用法

linux中sed的学习和使用 今天突然用到了sed这个命令,就即兴学习了一波突然感觉这个功能还是很强的.sed在#man sed下文档查看解释的是:用于过滤和转换文本的流编辑器.即如下图: 我自己用过这个命令之后感觉对于文档来说可以显示某个区间行,显示结果还可以在段前后添加内容删除,替换内容.但是最后才发现,怎么还能直接修改到文件里不仅仅是显示出来,文件内容直接被修改了. 下面就一一介绍这个有趣的命令,莫急莫急一个一个来. 首先找个文件(没用的文件且有内容,搞坏了系统文件可不好玩了)来当测试文

linux下sed命令对文件执行文本替换

让我们看一下 sed 最有用的命令之一,替换命令.使用该命令,可以将特定字符串或匹配的规则表达式用另一个字符串替换.下面是该命令最基本用法的示例: $ sed -e ‘s/foo/bar/’ myfile.txt 上 面的命令将 myfile.txt 中每行第一次出现的 ‘foo’(如果有的话)用字符串 ‘bar’ 替换,然后将该文件内容输出到标准输出.请注意,我说的是每行第一次出现,尽管这通常不是您想要的.在进行字符串替换时,通常想执行全局替换.也就是说, 要替换每行中的所有出现,如下所示:

linux 之sed命令详解

sed命令详解 sed是什么 sed是linux文本处理三剑客之一,全称 StreamEDitor,非常著名的行编辑器,功能十分强大. sed的工作过程 sed处理文本时每次从文件复制出来一行,放在工作车间,又叫做模式空间,即pattern space,然后与模式进行匹配.如果复制出来的这一行不能被模式匹配到,就默认把这一行输出至标准输出(如果用户明确指定不输出也可以). 如果能被模式匹配到,就对这行数据进行用户指定的编辑操作,编辑完成后可能输出至标准输出,也可能是用户指定的其他操作.这样第一行

linux系统sed命令解析

1. Sed简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等.以下介绍的是Gnu版本的Sed3.02. 2. 定址 可以通过定址来定位你所希望编辑的行,该地址

Linux三剑客——sed命令简述

Linux三剑客--sed13.1 sed介绍 sed--流编辑器(stream editor) sed功能与版本:处理文本文件,日志,配置文件增加.删除.修改.查询sed --version 语法格式:sed [选项] [sed指令] [输入文件]sed -i.bak 's#boy#girl#g' oldboy.txt-i sed命令的参数s sed命令g 小尾巴/修饰 sed命令执行过程13.2 sed命令功能示例 等号'='显示行号 sed = person.txt 单行-输入行号即可 s

linux中sed命令的使用(绝对精华版)

sed命令是linux或者shell编程中常用的筛选.替换命令,如果能熟练使用sed则对经常使用的人来说在工作上是非常有帮助的 下面把sed主要的用法列出来(有错误的地方大家可以指正): p命令只打印第三行,没有-n会在第三行后多打印第三行:sed -n '3p' filename 只打印最后一行:sed -n '$p' filename 只打印10到20行(包括10和20行,若后面数字小于前面数字,则只打印前面数字的行):sed -n '10,20p' filename 打印包含My在行尾的行

玩转LINUX之sed命令详解

Linux sed命令是利用script来处理文本文件. sed可依照script的指令,来处理.编辑文本文件. Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等. 执行时,sed会从文件或者标准输入中读取一行,将其复制到缓冲区,对文本编辑完成之后,读取下一行直到所有的文本行都编辑完毕. 所以sed命令处理时只会改变缓冲区中文本的副本,如果想要直接编辑原文件,可以使用-i选项或者将结果重定向到新的文件中. sed命令的基本语法如下: # sed [options] co

Linux之sed命令常见用法

1. sed(stream editor),流编辑器 linux中,主要中sed命令实现对文件的增删改替换查 名称 sed - 用于过滤和转换文本的流编辑器 SYNOPSIS sed [选项]... {script-only-if-no-other-script} [文件]... 常用选项或命令 -i 正式执行操作修改内容 -n 取消默认输出 -e 允许多项编辑 -r 使用扩展正则表达式 = 在文件内容行前增加一行行号 s 查找并替换 g 全局范围 p 打印输出 '/ /p' 正则表达式匹配/

Linux的sed命令

一.初识sed 在部署openstack的过程中,会接触到大量的sed命令,比如 # Bind MySQL service to all network interfaces.sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf 那么这条命令是什么意思?接下来介绍sed命令答案自然就揭晓了.二.sed简介 sed:是一个编辑器,是一个强大的文件处理工具. sed作用:用来替换.删除,更新文件中的内容.sed能自动处理一个或多个文件. sed原理:sed