• shell脚本-sed



    shell脚本之sed

    Linux处理文本文件的工具:
    grep 过滤文件内容
    sed 编辑文件内容
    awk 打印文本的工具

    正则表达式Regex

    1. 匹配单个字符的元字符
    	.   	:代表匹配任意单个字符
    	[abc]	:匹配abc中的任意一个
    	[a-z]	:匹配小写字母
    	[A-Z]	:匹配大写字母
    	[0-9]	:匹配数字
    	[a-zA-Z0-9]		匹配大写字母小写字母以及数字
    	[^a-z] 匹配除了小写字母以外的字符(数字或大写字母)
    
    1. 匹配字符出现的位置
    	^     托字符
    	^str 	以什么开头
    	str$	以什么结尾
    	^$    空行
    
    
    1. 匹配字符出现的次数
    *  匹配0次或多次
    ? 匹配0个或1个
    + 匹配一个或多个
    {3} 精确匹配3次
    {2,5}  匹配2到5次
    {2,} 至少匹配2次
    

    4)匹配多个字符 用分组

    (abc){2}    匹配2次
    

    sed: Stream Editor 流编辑器

    行编辑器 逐行编辑
    

    将每行内容读入到内存中,在内存中进行处理,将结果返回给屏幕 ,此段内存空间称为模式空间

    默认不编辑原文件,仅对模式空间的数据进行处理,处理结束后,将模式空间的内容显示到屏幕

    sed命令的使用格式

    sed [option] scripts file1 file2 ...

    sed [option] 'AddressCommand' file1 file2 ...

    Address:表示对哪些行进行处理
    Command:操作命令
    
    
    option选项:
    	-n:不再显示模式空间中的内容(默认显示)
    	-i: 直接修改原文件
    	-e 'AddressCommand' -e 'AddressCommand':同时执行多个匹配操作
    		[root@shell ~]# sed -e '/^#/d' -e '/^$/d' /etc/fstab 
    
    	-f FILE	将多个AddressCommand保存至文件中,每行一个AddressCommand;读取该文件中的操作同时执行多个操作 
    	
    		[root@shell ~]# cat /tmp/1.txt 
    			/^#/d
    			/^$/d
    		[root@shell ~]# sed -f /tmp/1.txt /etc/fstab 
    
    	
    	-r:表示使用扩展正则表达式   
    	
    		[root@shell ~]# sed -r  's|l(..e)|L1|' /tmp/1.txt
    
    		
    	--follow-symlinks     修改软链接文件时 
    	 
    	[root@shell ~]# sed --follow-symlinks -i 's|hello|hi|' /tmp/2.txt 
    

    Address表示方法:

    1、StartLine,EndLine

    	1,100    对文件中的100 行经行操作
    	1,$       对文件的第一行到最后1行
    	3,10     对文件的3到10行
    

    2、LineNumber

    	3   对文件的第3行进行操作
    	$对最后一行经行操作
    

    3、StartLine,+n

    	5,+2 				对567经行操作
    	/root/,+2  找到root这一行,以及后2行
    

    4、/正则表达式/,在sed中用正则表达式,固定格式/正则表达式/

    /root/   在文件中找到带有root的行
    /bash$/  以bash结尾的行
    

    5、 /正则表达式1/, /正则表达式2/

    第1次被Regex1匹配的行开始,到第1次被Regex2匹配的行中间的所有行
    

    Command:

    1:删除

    删除符合条件的行

    sed '1,2d' /etc/inittab 
    

    删除文件中包含oot的行

    sed '/root/d' /etc/fstab 
    

    删除第1行及其后2行

    sed '1,+2d' /etc/fstab 
    

    删除第1行

      sed '1d' /etc/fstab 
    

    删除以/开头的行

    sed '/^//d' /etc/fstab 
    

    追加

    a string 在符合条件的行后追加新行,string为追加的内容
    在以/开头的行后面追加# hello world

    sed '/^//a #hello world' /etc/fstab 
    

    在以/开头的行后面追加两行内容,分别为# hello worl # hello linux

    sed '/^//a # hello world
    # hello linux' /etc/fstab 
    

    插入

    i在指定的行插入
    i string 在符合条件的行前添加新行,string为追加的内容
    在文件第1行添加# hello world

    sed '1i # hello world' /etc/fstab
    

    替换(替换整行)

    c string 替换指定行的内容
    将文件中最后一行内容替换为End Of File

       sed '$c End Of File' /1.txt 
       
       sed '7c SELINUX=disabled' /etc/sysconfig/selinux 
    

    替换 (替换的是某一部分)

    c替换的是整行的内容,s 替换某1行的某一部分内容
    s/regex/string/[修饰符] 查找并替换 默认情况下,只替换每一行第1次出现的字符
    修饰符:
    g:替换每一行所有的字符
    i:忽略大小写

    [root@localhost ~]# sed 's/^#/?/' /etc/fstab 
    
    查找文件中的UUID,并替换为uuid
    sed 's/UUID/uuid/' /etc/fstab 
    
    将行首的/替换成#
    sed 's/^//#/' /etc/fstab 
    [root@localhost ~]# sed 's|/|#|g' /etc/fstab 
    
    将每一行出现的所有/替换为@
    sed 's///@/g' /etc/fstab 
    

    反向引用 () :其中代表转义

    1 :代表引用正则表达式里面第一对圆括号里面的内容

    2 :代表引用正则表达式里面第二对圆括号里面的内容

    将文件中以l..e替换为l..er,例如love替换为lover

    [root@localhost ~]# cat /tmp/1.txt 
    He like car
    She love He
    
    [root@localhost ~]# sed 's@(L..e)@1r@' /tmp/1.txt 
    He Liker car
    She Lover He
    

    &:引用正则表达式匹配的所有字符串

    将文件中l..e的单词替换为L..e,例如love替换为Love

      sed 's/l(..e)/L1/' /1.txt 
    

    sed示例1:

    1、删除/etc/grub2.cfg文件中行首的空白字符
    
    2、将/etc/fstab文件中的数字5替换为数字3
    
    3、删除/etc/fstab文件中的空白行
    
    4、删除/etc/inittab文件中开头的#号
    
    5、删除某文件中开头的#号,但要求#号后面必须有空白字符
    
    6、删除某文件中以空白字符后面跟#号的行中的开头的空白字符及
    

    sed示例2:

    系统初始化脚本:
       1) 配置固定IP
       2) 关闭SEinux及防火墙
       3) yum源 
       4) 关闭SSH DNS解析及GSSAPI认证
       5) 172.16.8.100同步时间
       6) 设置主机名 
    
    
    有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。 想到与得到中间还有两个字——做到。
  • 相关阅读:
    如何检索某个字段在sqlserver中的哪个些存储过程中?很简单的SQL语句。
    如何去掉HTML代码来获取纯文本?
    ajax实现跨域请求
    ajax实现跨域提交
    lab3
    Lab2
    hw2
    Homework1
    Lab1
    CS61B_学习计划和进程
  • 原文地址:https://www.cnblogs.com/huoxc/p/12899729.html
Copyright © 2020-2023  润新知