Shell 脚本之文本三剑客(sed)

sed和awk的区别:

1. awk主要处理的是列

    sed处理的行

2. awk处理固定长度的列用比较好

    不固定长度的列用sed好处理

一. sed语法&选项

1. 语法
①基本语法,类似cat


② sed 选项 '自身脚本语法'  操作

sed [option]... 'script;script;...' [input  file...]
     选项         自身脚本语法         支持标准输入管道


tips:选项可以没有,但是自身脚本语法操作必须要有。

单引号双引号无所谓,awk要注意单双引号。

2. 选项

sed选项分两类

① 命令的选项

-e 多点编辑 例: sed -n -e  '/^r/p'  -e  '/^b/p'  /etc/passwd
-n关闭自动打印(sed会自动打印,不关用脚本语法中的 ‘p’ 时会打印两次)
-r使用扩展正则
-i 实际修改文件的内容
-i.bak实际修改前先备份源文件,会产生一个源文件.bak的文件


② sed自身脚本语法中的命令选项
脚本语法格式:‘地址+命令’

Ⅰ. 不写地址就是全文(比如行号)

Ⅱ .单地址

      #:指定的行

      $:最后一行

Ⅲ .地址范围:
    

  #,#     #从#行到第#行,3,6 从第3行到第6行
  #,+#   #从#行到+#行,3,+4 表示从3行到第7行
  /pat1/,/pat2/    第一个正则表达式和第二个正则表达式之间的行
  #,/pat/  从#号行为开始找到 pat为止 
  /pat/,#  找到#个/pat/为止

Ⅳ .步进:~   

1~2  奇数行

2~2  偶数行

sed -n 'n;p' testfile1		#打印偶数行

ed -n '2,${n;p}' testfile1

Ⅴ .命令选项

 打印 查看文件第三行:sed -n ‘3p’  文件名 ,前三行是 '1,3p'
q提前退出打印到第三行就退出:sed ‘3q’  文件名
d删除查看时删掉第三行:sed ‘3d’  文件名
a在某一行的后一行插入内容 

在第三行后加入hh  sed 3ahh

(不打开文件的情况下修改文件内容,但没保存到文件里)

i在某一行的前一行插入内容同上,把a换成 i
把某一行替换成掉同上,把a换成 c
r插入文本内容 在第二行后插入文本内容:sed  '2r 要插入的文本名' 
=显示行号一般不用

3. 用法举例


① 例:查找几点几分到几点几分之间的日志(/pat1/,/pat2/)
 sed  -n  '/几点几分/,/几点几分/p'   日志文件

② 例:修改文件内容
sed  -i  '2a \ hehe\nhaha'  文件名  
\表示空格    \n 表示换行

二. 搜索替代

脚本命令里面可以用s///来搜索替代,类似vim的s///

1. 普通用法
(地址)s/旧字符/新字符/修饰符,
tips:旧字符可以用表达式,新字符不可以

修饰符:

修饰符效果
g  行内全局替换
p    显示替换成功的行
w   /PATH/FILE 将替换成功的行保存至文件中
I,i  忽略大小写

例:把/etc/passwd里面的root后面加上er

2. 分组后项引用
tips:只有扩展正则式才支持分组

举例讲解
① 基本用法


② 高阶用法 筛选(.*)
常用公式:sed -nr 's/旧字符/\1/p'        (1:要选择留下的组。p:打印出来)

例:筛选出网卡信息中的IP地址

三、expect自动化交互

1. expect作用:

是建立在tcl语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互的相关问题

2. expect语言用法:
spawn开启免交户  开启expect
expect捕捉屏幕上的关键字
exp_continue继续捕捉屏幕上的字
send发送指令
interact代表退出expect,但是会留在新的终端
expect eof代表退出expect 默认10s后,返回旧的终端。
3. 实例
yum install expect -y     #先安装expect工具
 
vim /opt/test             #写脚本
 
#!/usr/bin/expect       语言注意不是bash,是expect
spawn    ssh  172.16.234.10     
#开启免交互,继续跟踪
expect {
#捕捉屏幕上的关键字
     "yes/no"   { send "yes\n"; exp_continue }
#捕捉到屏幕上的关键字yes/no,输入yes。\n是回车。exp_continue继续捕捉
     "password" { send "123\n"; exp_continue }
#继续捕捉到关键字passwdord,输入密码,继续捕捉
     "#"        { send "useradd lisi \n"}
#继续捕捉到屏幕上的关键字"#"号,创建用户lisi
}
expect eof
#退出expect
 
:wq
 
./ test   #运行脚本

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值