expect,sed
2019-08-08 本文已影响0人
快去学习不然怎么去看aimer
expect
auto_keygen (){
/usr/bin/expect<<EOF
set timeout 30
spawn ssh-keygen
expect {
".ssh/id_rsa)" { send "\n"; exp_continue }
"Overwrite (y/n)?" { send "y\n"; exp_continue }
"for no passphrase):" { send "\n"; exp_continue }
"again:" { send "\n"; exp_continue }
}
EOF
}
send_key(){
/usr/bin/expect<<EOF
set timeout 30
spawn ssh root@$ip
expect {
"password:" { send "${pwds}\n"; exp_continue }
}
EOF
}
for ip in $(cat ./ips.txt)
do
send_key $ip
done
for pwds in $(cat ./pwd.txt)
do
send_key $pwds
done
auto_keygen
send_key
执行免密操作:上述指令得到的就是该过程
定义函数,在函数中调用expect注意开始的EOF和结束的EOF后面的换行符应该相同
set timeout 30 操作延时为30秒
spawn 后面接要执行的命令
expect 里为捕获的字符,里面接具体操作
sed
sed 支持正则表达式,并且可以把匹配模式与内部命令在另一文档里
sed 命令格式
sed [options] '[匹配模式] [sed 的内部命令]' file1
sed [options] '[匹配模式] [sed 的内部命令]' file1 file2
sed [options] -f sedcommand.sed file
在sedcommand.sed里,
1,5 d
同样会删除前5行
sed会默认输出每行,不管匹配到还是没有匹配到
sed -r '' /etc/passwd 不匹配任何东西,但是默认会输出每一行
sed -r 'p' /etc/passwd 打印所有行,但是默认输出也会输出,因此每一行都会输出两次
sed -rn '/root/p' /etc/passwd 打印含有root的行,-n为关闭默认输出
sed -r 's/root/shark/' mypasswd 搜索每一行,找到有 root 的,把第一个替换为 shark
sed -r 's/root/shark/g' mypasswd 搜索每一行,找到所有 root 的,进行全局替换
sed -r '1,3 d' mypasswd 第 1 行到第 3 行都删除
sed -r '/root/,5 d' mypasswd 从含有 root 字符串的行开始,一直到第 5 行进行删除
sed -r '/root/ !d' mypasswd 含有 root 的行不删除,其他都删除
sed -r '1~2 d' mypasswd 奇数行删除,其实就是 匹配到 行号 除以 2 ,余数是 1 的行
sed -rn '0~2 p' mypasswd 偶数行打印
[root@localhost ~]# sed -rn 'p' mypasswd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@localhost ~]# sed '3a rourou' mypasswd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
rourou
adm:x:3:4:adm:/var/adm:/sbin/nologin a为在n行之后添加一行
[root@localhost ~]# sed '2c rourou' mypasswd
root:x:0:0:root:/root:/bin/bash
rourou
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin c为将 n行替换为指定内容
[root@localhost ~]# sed '2i rourou' mypasswd
root:x:0:0:root:/root:/bin/bash
rourou
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin i为在n行之前插入指定内容