zoukankan      html  css  js  c++  java
  • 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) 设置主机名 
    
    
    有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。 想到与得到中间还有两个字——做到。
  • 相关阅读:
    POJ2778 DNA Sequence AC自动机上dp
    codeforces732F Tourist Reform 边双联通分量
    codeforces786B Legacy 线段树优化建图
    洛谷P3588 PUS 线段树优化建图
    codeforces1301D Time to Run 模拟
    codeforces1303B National Project 二分或直接计算
    codeforces1303C Perfect Keyboard 模拟或判断欧拉路
    codeforces1303D Fill The Bag 二进制应用+贪心
    python之路——使用python操作mysql数据库
    python之路——mysql索引原理
  • 原文地址:https://www.cnblogs.com/huoxc/p/12899729.html
Copyright © 2011-2022 走看看