目录
一、sed概述
sed 命令和 vim 不同,sed是行编辑器,一行一行处理文件。从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。 一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象。如果使用vim命令打开几十M上百M的文件,明显会出现有卡顿的现象,这是因为vi命令打开文件是一次性将文件加载到内存,然后再打开。sed就避免了这种情况,一行一行的处理,打开速度非常快,执行速度也很快。
二、sed基本用法
1、命令格式
sed [选项] '语法' 文件或标准输入或标准输出
2、选项
-n :关闭自动打印
-r :使用拓展正则表达式
-i :实际修改文件内容,-i.bak 表示在修改文件前先进行备份,产生一个 “源文件名.bak” 的文件
3、语法
' ' 中的语法由地址和命令组成
命令:
①p 手动打印,需要再前面加 -n选项
②q 表示对应位置后提前退出
③d 表示删除对应行
④a 表示在指定行的后面追加文本
例:sed '3anihao' 123 表示在123文件第三行后面一行加上nihao
⑤i 表示在指定行的前面追加文本
例: sed '3inihao' 123 表示在123文件第三行前面一行加上nihao
⑥c 表示替换指定行的内容
⑦ = 等号表示显示行号
4、搜索替代
格式:范围 s/旧字符/新字符/修饰符
查找替换,支持使用其它分隔符,例如用@或者#替代/。修饰符g 表示行内全局替换,p 显示替换成功的行。
5、分组后向引用
分组后向引用必须要用sed -r选项使用拓展正则表达式,其难点是用正则表达式表达整行想要的内容。
三、多行重定向
多行重定向是指使用I/O重定向的方式将命令列表提供给交互式程序,是标准输入的一种替代品。注意结尾标记前后不能有任何字符,空格也不行。
语法格式:
命令 <<标记 >文件
....
......
>标记
四、免交互expect脚本
expect是建立在tcl(tool command language)语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互的相关问题。
书写expect脚本的注意点:
1、linux默认没有安装expect软件,要先使用yum安装
2、脚本文件名不能以.sh 结尾,可以直接不加后缀名
3、脚本中声明解释器要写#!/usr/bin/expect ,不是#!/bin/bash
4、spawn 后面跟上要执行的命令
5、expect 用于捕捉关键字,关键字要用" " 引起来
6、最后的结束符分为两种,expect eof 表示交互结束后,回到原用户;interact 表示交互结束后会保持在终端,不退回原终端;且两者只能二选一。
目录