2017-03-15 3 views
-1

Ich habe ein expect-Skript, das eine Reihe von Konfigurationen ergreift und sie in separaten Dateien ausgibt. Die Dateien haben aber eine Menge ^H, obwohl ich gerne sauber machen würde. Ich benutzte die CtrlV + CtrlH es im erwarten Skript zu setzen, aber wenn es läuft es tut es einfach. Die sed funktioniert gut in bash, scheitert aber in expect. Wie kann ich die ^H aus den Dateien löschen?Erwarten löscht^H nach spawn bash -c

foreach host $ip { 
     set output [ open "$host" w ] 
     set timeout 2 
     spawn ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -o "StrictHostKeyChecking no" -oHostKeyAlgorithms=+ssh-dss [email protected]$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 

Hier ist, wie es aussieht, wenn es läuft:

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

sind Sie haben keine Frage gestellt. Was benötigen Sie Hilfe mit – Gab

+0

Ich fügte die Frage hinzu – cflinspach

+0

könnten Sie versuchen, 'spawn bash -c 'sed -i' s/\\ o010 // gi; s/- Mehr - // g './$host "' (zwei umgekehrte Schrägstriche könnten helfen) und die Ausgabe veröffentlichen? –

Antwort

1

eine ASCII-basierte locale Unter der Annahme, sollte diese Arbeit:

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

\010 ist Oktal 8, die die ASCII Äquivalent der Rücktaste.

+0

Ich wollte das nur posten –

+0

Nein, es löscht nur noch das Zeichen davor. Es endete mit 'spawn bash -c tr -d '192.168.50.1 192.168.50.1.txt' – cflinspach

0

Für sed rufen, da Sie nicht mit dem Prozess interagieren müssen, können Sie exec statt:

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

Tcl-Version von einfachen Anführungszeichen verwenden, die {}