Linux下常用命令之sed学习总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下常用命令之sed学习总结相关的知识,希望对你有一定的参考价值。

  • Sed功能说明:

Sed是linux下一个强大的文本文件处理工具,通过对文件增加、删除、查找、查询操作,配合正则表达式以实现工作中的各种需求。同时也是一名运维人员必须掌握的核心技能。

------------------------------------------------------------------------------------------------------

  • sed正则表达式:

^           匹配行开始

$           匹配行结束

.           匹配一个非换行符的任意字符

*           匹配0个或多个字符

[]          匹配一个指定范围内的字符

[^]         匹配一个不在指定范围内的字符

\(..\)      匹配子串,保存匹配的字符,给替换命令s的\N引用

&           保存搜索字符用来替换其他字符,给替换命令s的&引用

x\{m\}      重复字符x,m次

x\{m,\}     重复字符x,至少m次

x\{m,n\}    重复字符x,至少m次,不多于n次

------------------------------------------------------------------------------------------------------

  • Sed命令格式:

sed [选项] ‘范围/命令‘ 文件

------------------------------------------------------------------------------------------------------

常用选项:

-n  只显示匹配到的内容,通常和p参数配置使用。

-e  同时执行多个命令,另一种实现方式:‘命令1;命令2‘

-i  执行命令并实际修改文件,如果不使用此选项,sed所有的操作都只是修改内存中的值而已。

------------------------------------------------------------------------------------------------------

  • 常用范围:

1           :匹配第1行

1,5         :匹配第1行到第5行

2,$         :匹配第2行到最后1行

1~2         :匹配基数行,2表示步进值

2~2         :匹配偶数行,2表示步进值

/string/    :匹配包含字符串的行

/[a-z]/     :匹配包含某个范围的行

/^string/   :匹配包含元字符集的行

/正则/      :匹配正则表达式内容的行

------------------------------------------------------------------------------------------------------

  • 常用命令:

s  替换指定内容                   格式:‘/范围/s/替换内容/新内容/替换范围‘

a\ 在行下面插入文本               格式:‘范围a\内容‘

i\ 在行上面插入文本               格式:‘范围i\内容‘

c\ 把选定的行改为新的文本         格式:‘范围c\内容‘

d  删除选择的行                   格式:‘范围d‘

h  拷贝内容到缓冲区               格式:‘范围h‘

G  获得缓冲区内容并追加           格式:‘范围G‘

p  打印文件内容                   格式:‘范围/命令/p‘

r  读取file内容显示在范围后       格式:‘范围/r file‘

w  提取范围里的内容到file里       格式:‘范围/w file‘

!  匹配与范围相反的内容           格式:‘范围!‘

------------------------------------------------------------------------------------------------------

  • 替换命令s常用参数:

/  定界符                         格式:‘/‘                          如果旧值包含‘/‘,可以修改/为@或者#或者|等

g  替换范围,N表示第几次匹配       格式:‘范围/s/旧值/新值/Ng‘        没有N表示全部替换

\N 引用子串,N表示第几个子串       格式:‘范围/s/*子串*/\N/g‘         *表示其它内容

&  引用‘#‘的内容                  格式:‘范围/s/#/*&*/g‘             #表示匹配内容


------------------------------------------------------------------------------------------------------

正则表达式示例:

/^#/               匹配所有以#开头的行

/sh$/              匹配所有以sh结尾的行

/s.d/              匹配s后接一个任意字符接d

/s*ed/             匹配0个或多个s接ed的行

/[0-9]/            匹配包含数字的行

/[a-z]/!           匹配不包含字母的行

/[^a-z]/           匹配不包含全字母的行

/\(sh\)ell/#\1#/   匹配shell替换为#sh#

/shell/*&*/        匹配shell替换为*shell*

/s\{5\}/           匹配包含5个s的行

/s\{5,\}/          匹配至少有5个s的行

/s\{5,10\}/        匹配5~10个s的行

------------------------------------------------------------------------------------------------------

常用选项示例:

仅显示匹配到的第1行内容 :sed -n ‘1p‘ /etc/passwd

同时执行多个命令        :sed -n -e ‘1p‘ -e ‘/mysql/p‘ /etc/passwd 或者 sed -n ‘1p;/mysql/p‘ /etc/passwd

执行命令并修改原文件    : sed -i ‘2d‘ /etc/rc.local

------------------------------------------------------------------------------------------------------

常用范围示例:

匹配第1行           :sed -n ‘1p‘ /etc/passwd

匹配第1到5行        :sed -n ‘1,5p‘ /etc/passwd

匹配第2行到最后1行  :sed -n ‘2,$p‘ /etc/passwd

匹配奇数行          :sed -n ‘1~2p‘ /etc/passwd

匹配偶数行          : sed -n ‘2~2p‘ /etc/passwd

匹配包含mysql的行   :sed -n ‘/mysql/p‘ /etc/passwd

匹配以a/b/c开头的行 :sed -n ‘/^[a-c]/p‘ /etc/passwd

匹配以root开头的行  :sed -n ‘/^root/p‘ /etc/passwd

匹配5加至少2个0的行 :sed -n ‘/50\{2,\}/p‘ /etc/passwd

------------------------------------------------------------------------------------------------------

常用命令示例:

匹配包含mysql开头的行替换登录权限 :sed -n ‘/^mysql/[email protected]/bin/[email protected]/sbin/[email protected]‘ /etc/passwd

匹配文件第1行并在行前插入######   :sed ‘1i\######‘ /etc/passwd

匹配文件第1行并在行后插入######   :sed ‘1a\######‘ /etc/passwd

匹配文件第2行并修改为######       :sed ‘2c\######‘ /etc/rc.local

匹配文件第2行并删除内容           :sed ‘2d‘ /etc/rc.local

拷贝文件第2行并追加到最后1行      :sed ‘2h;$G‘ /etc/rc.local

读取resolv内容追加到local最后1行  :sed ‘$r /etc/resolv.conf‘ /etc/rc.local

读取local第3到5行内容写到newfile  : sed -n ‘3,5w newfile‘ /etc/rc.local

匹配文件不包含空行的内容          :sed -n ‘/^$/!p‘ /etc/rc.local

------------------------------------------------------------------------------------------------------

替换命令s常用参数示例:

根据实际情况修改定界符     :sed ‘[email protected]#!/bin/[email protected]#!/bin/[email protected]‘ /etc/rc.local

从第2次匹配后开始替换      :echo shellshellshell |sed ‘s/shell/SHELL/2g‘

提取子串并反向引用后替换   :echo test is ABc or 111 |sed ‘s/\([a-Z]\{3\}\) or \([0-9]*\)/*\2* or #\1#/‘

保留搜索到的内容并引用     :echo this is test file |sed ‘s/test/##&##/‘

------------------------------------------------------------------------------------------------------

注意:

当sed在脚本中处理替换操作时,如果新内容是引用变量,则需要把单引号修改为双引号

示例:

name=123456

echo "####6543210####"|sed -n "s/[0-9]\+/$name/p"

------------------------------------------------------------------------------------------------------


本文出自 “该死的温柔” 博客,请务必保留此出处http://lsong.blog.51cto.com/2432419/1922121

以上是关于Linux下常用命令之sed学习总结的主要内容,如果未能解决你的问题,请参考以下文章

linux 常用terminal命令总结

linux 常用terminal命令总结

Linux常用基本命令:三剑客命令之-sed

Linux常用命令之sed

Linux常用命令之sed

Linux常用命令之sed