Shell基本学习(6)---三剑客其Sed

sed(Stream Editor)是一个流编辑器。对标准输入或文件逐行进行处理。

sed的基本选项

-n 只打印模式匹配行

-e 直接在命令行进行sed编辑,默认选项

-f  编辑动作保存在文件中,指定文件执行

-r  支持扩展正则表达式

-i  直接修改文件内容

基础功能

1.示例打印文件内容

设置一个文件,里面有三行数据
onetwo
goaway
network

语法:sed 'p' 文件            'p'相当于print,并不是查找内容为p相关的。

[root@localhost ~]# sed 'p' testone.txt       
onetwo
onetwo
goaway
goaway
network
network

2.同一行会执行两次,这是sed机制的原因,相当于它先输出一次再执行一次指定的命令,所以下面有一个静默命令-n

语法:sed -n 'p' 文件

[root@localhost ~]# sed -n 'p' testone.txt 
onetwo
goaway
network

3.查找相关内容并打印

语法:sed -n '/查找内容/p' 文件

[root@localhost ~]# sed -n '/k/p' testone.txt  
network

4.多个匹配1

语法:sed -n -e '/查找内容1/p' -e '/查找内容/p' 文件

[root@localhost ~]# sed -n -e '/onetwo/p' -e '/network/p' testone.txt   
onetwo
network

5.多个匹配写法2

语法:sed -n -r '/条件1|条件2/p' 文件                 | 或符号     -r为拓展正则表达式

[root@localhost ~]# sed -n -r '/onetwo|network/p' testone.txt                     
onetwo
network

6.指定文件规则读取匹配

语法:sed -n -f 匹配规则文件 被查找文件         -file

role.sed 为规则文件  内容为  /onetwo/p

[root@localhost ~]# sed -n -f role.sed testone.txt                              
onetwo

7.替换文件匹配内容,并打印(不修改文件)

语法:sed -n 's/原始内容/替换内容/g;p' 文件              s为全部行   g为全部替换

[root@localhost ~]# sed -n  's/one/two/g;p' testone.txt                    
twotwo
goaway
network

8.替换文件匹配内容(修改文件)

语法:sed  -i 's/原始内容/替换内容/g' 文件              s为全部行   g为全部替换

[root@localhost ~]# sed -i 's/one/two/g;p' testone.txt 

9.占位符匹配

sed -i 's/da...dan/congminggui/' test.txt            ...为站位符与sql_一致

.*为任意字符 例 [.*]表示方框内任意内容的匹配

10.反向引用

sed -i 's/da...dan/&zhencongming/' test.txt 
&代表引用之前的匹配结果,&zhencongming代表往原有匹配结果后拼接并替换

11.拓展一下脚本调用取值

[root@localhost ~]# test()
> {
> sed -n '/go/p' testone.txt 
> }
[root@localhost ~]# e=$(test)
[root@localhost ~]# echo ${e}
goaway

匹配拓展

匹配指定行
sed -n '1p' testone.txt      打印第一行
匹配指定多行
sed -n '1,2p' testone.txt    打印一到二行
匹配指定多行
sed -n '1,+1p' testone.txt   从第一行开始再增加指定行
匹配指定开头的行
sed -n '/^two/p' testone.txt    /^内容/
指定文字区间的匹配
sed -n '/rui123/,/sar/p' test.txt      从rui123行到sar的行结束
指定行到匹配的区配
sed -n '1,/123jiu/p' test.txt       从1行到匹配到123的行结束
指定匹配行到指定行
sed -n '/123jiu/,3p' test.txt       从匹配到123jiu到3的行结束

编辑命令对照表

查询        p                打印

增加        a                行后追加
            i                行前追加
            r                外部文件读入,行后追加
            w                匹配行写入外部文件  

删除        d                删除

修改        s/old/new        将行内第一个old替换为new
            s/old/new/g      将行内全部old替换为new
            s/old/new/2g     将行内前两个old替换为new
            s/old/new/ig     将行内old全部替换为new,忽略大小写
              

删除匹配行

单行删除
sed -i '/i1owo/d' test.txt 
多行(根据匹配下语句为从abc开头到包含789的第一个结果行区间进行删除)
sed -i '/^abc/,/789/d' test.txt

追加内容

向后追加(符合条件默认全部追加)
sed -i '/908/a hello sola!' test.txt  在包含908内容的行后增加行
向前追加(符合条件默认全部追加)
sed -i '/908/i hello sola!' test.txt
指定文件内容向后追加
sed -i '/90894/r add.txt' test.txt    r空格后填入文件路径
将匹配的内容存至其他文件
sed -i '/90894/w add1.txt' test.txt

 

修改文件内容

1.将文件中指定单行匹配的内容替换

语法: sed -i '1s/原文本/新文本' 文件           1s代表第几行

sed -i '1,5s/haotian/rui123/' test.txt  

2.将文件中指定多行数匹配的内容替换

语法: sed -i '1,5s/原文本/新文本' 文件            1,5s代表1到5行

sed -i '1s/haotian/rui123/' test.txt  
tips:如改变路径信息需要转义   1s/\/ect\/file/\/bin\/bash/g               g是所有
 
3.将包含指定的内容的行,里面的内容进行替换
 
语法:sed -i /包含内容行/s/原内容/替换内容/g 文件
 
sed -i '/hao/s/hao/123/g' test.txt

4.将指定以内容开始的行,并包含指定内容的行进行文本替换(这里指的这中间的所有行)

语法:sed -i /^jiu/,/123/s/benben/congming/g    指定以jiu开头并且包含123的所有行进行替换

sed -i '/^jiu/,/123/s/benben/congming/g' test.txt

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值