期望在生成bash -c之后删除^ H.

时间:2017-03-15 13:48:02

标签: bash sed expect

我有一个期望脚本,可以抓取一堆配置并将它们输出到单独的文件中。虽然我想清理一下,但这些文件有一堆^H。我使用 Ctrl V + Ctrl H 将它放在expect脚本中,但是当它运行时它只是可以。 sed在bash中运行良好,但在预期中失败。如何从文件中删除^H

foreach host $ip {
        set output [ open "$host" w ]
        set timeout 2
        spawn ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -o "StrictHostKeyChecking no" -oHostKeyAlgorithms=+ssh-dss $username@$host
        expect {
                eof {wait; spawn telnet $host;
                        expect "ame:";
                        send "$username\r"}
        }
        expect "word:"
        send "$password\r"
        expect "#"
        send "$command\r"
        sleep 2
        expect {
                "ore--" { send -- " "; puts $output $expect_out(buffer); exp_continue}
                "#" {send -- "exit\r"}
        }
        puts $output $expect_out(buffer)
        close $output
        close
}
foreach host $ip {
        spawn bash -c "sed -i 's/^H//gi; s/--More--//g' ./$host"
}
close

这是运行时的样子:

spawn bash -c sed -i 's//gi; s/--More--//g' ./192.168.50.1
spawn bash -c sed -i 's//gi; s/--More--//g' ./192.168.51.1
spawn bash -c sed -i 's//gi; s/--More--//g' ./192.168.52.1

2 个答案:

答案 0 :(得分:1)

假设基于ASCII的语言环境,这应该有效:

tr -d '\010' < file > file.new

\010是八进制8,它是退格的ASCII等价物。

答案 1 :(得分:0)

对于呼叫sed,由于您不需要与流程进行交互,因此您可以使用exec代替:

foreach host $ip {
    exec sed -i {s/^H//gi; s/--More--//g} ./$host
}

使用Tcl的单引号版本,即{}