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行之前插入指定内容
上一篇下一篇

猜你喜欢

热点阅读