美文网首页
expect,sed

expect,sed

作者: 快去学习不然怎么去看aimer | 来源:发表于2019-08-08 08:29 被阅读0次

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

    相关文章

      网友评论

          本文标题:expect,sed

          本文链接:https://www.haomeiwen.com/subject/mrundctx.html