我有一个期望脚本,可以抓取一堆配置并将它们输出到单独的文件中。虽然我想清理一下,但这些文件有一堆^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
答案 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的单引号版本,即{}