Day4-Expec+sed
Expect 编程语言——变量 函数 流程控制 数组
把交互操作通过非交互的方式完成
#!/usr/bin/expect
spawn 触发交互式操作
spawn ftp 192.168.100.100
Expect "捕获的数据" 捕获命令执行时,输出的数据,捕获到为成功
Expect "password:"
send "命令" expect捕获到指定的数据后,发送指令
send "password"
#!/usr/bin/expect
set ip "192.168.100.100"
set username "ftp"
set password ""
set path [ lindex $argv 0 ]
set path [ lindex $argv 1 ]
spawn ftp $ip
Expect "Name"
send "$username
"
Expect "Password:"
send "$password
"
Expect "ftp>"
send "cd test
"
Expect "ftp>"
send "lcd $path
"
Expect "ftp>"
send "put $file
"
Expect "ftp>"
send "bye"
sed——非交互式的文件编辑器——文件
打印 输入文件内容 删除 添加 修改 导入 导出 复制 剪切
命令格式
sed 选项 '动作' 文件名
命令|sed [选项] '动作'
执行过程——以行为处理单位 逐行处理,把当前行的处理结果默认输出到屏幕,然后自动处理下一行,直到把文件中的所有行处理完为止
工作原理
模式空间——处理文件时,把文件中的行 拷贝到自己的模式空间,然后用动作对模式空间里的行做处理,把处理结果输出到屏幕上,默认把模式空间的源数据输出
保持空间——默认只存储一个换行符号
存放到保持空间里的行不会被sed处理——只是一个临时存储文件中行的空间
条件表示方式
行号
/正则表达式/
选项 -i 对原文件进行操作
动作
打印 p
#sed –n 'p' file
#sed –n '1p' file
#sed –n '$p' file
#sed –n '1p;3p' file
#sed –n '2,4p' file
#sed –n '/n/p' file
#sed –n '/^r/p' file
#sed –n '/^$/p' file
删除 d 以行为单位
#sed 'd' file
#sed '/^$/d' file
添加行 以行为单位添加行——没有空行不处理
当前行的下方添加新行 a
当前行的上方添加新行 i
替换 以行为替换单位
#c
替换 替换一行中的部分数据
#sed -i 's/源数据/新数据' 文件名
#sed -i '条件s/源数据/新数据/替换选项' 文件名
条件的表示方式——行号——/正则表达式/
替换选项g——全局 i——忽略字母大小写
源数据表示方式——可以使用匹配字符表示、也是使用正则表达式
-r 忽略正则表达式符号
() 后向引用——把源数据保存起来,在替换的时候使用
() () () () () () () () ()
1 2 3 4 5 6 7 8 9
& 保存替换时的源字符串
把当前系统最好后一个用户的shell修改为/sbin/nologin
sed -i '$s//bin/bash//sbin/nologin/' /etc/passwd
自定义替换时的间隔符
sed -i '$s;/bin/bash;/sbin/nologin;' /etc/passwd
sed -i '$s#/bin/bash#/sbin/nologin#' /etc/passwd
导入数据 r 把其他文件的内容读取到当前文件里
sed '条件r file1' file2 将file1文件内容读到file2文件里
sed -i 'r file1' file2
sed -i '$r file1' file2
导出数据 w 把当前文件的内容写到另一个文件里——相当于另存为
sed -i 'w file1' file2 将file1文件内容保存到file2文件里
sed -i '条件w file1' file2
sed -i '/a/w /path/file1' file2 字母为a覆盖导入
sed -i '1,2w file1' file2
模式空间
追加 H
覆盖 h
保持空间
追加 G
覆盖 g
复制
把文件的前2行复制到文件的末尾
sed '1h;2H;$G' file
剪切
把文件的前2行剪切到文件的末尾
sed '1h;2H;1,2d;$G' file
命令组合键{}
sed -n '3=;3p' file
sed -n '3{=;p}' file
-f 调用sed文件对数据做处理
sed -f xxx.sed file
sed 流控函数
取反 !
把当前行的下一行读取到模式空间 n