
Ich versuche, eine Zeichenfolge in einer Datei zu ersetzen, die sich auf einem Remotecomputer befindet. Zuerst muss ich die Zeilennummer mit dem Befehl grep abrufen und dann mithilfe dieser Zeilennummer die Zeichenfolge ersetzen, die in dieser Zeile enthalten ist.
Mein Code sieht so aus: meine Skriptdateisc.sh.
# path of script.sh on remote machine
file_path="/home/user/script.sh"
#file-[0-9]\.[0-9]\.[0-9]\.txt using for file-1.0.5.txt
sshpass -p 'pswd' ssh user@remote-01 "bash -s" <<EOF
n=$(grep -wn "/tmp/xyz/file-[0-9]\.[0-9]\.[0-9]\.txt\" $file_path | cut -d : -f 1)
sed -i '{$n}s/old_string/new_string/}' $file_path;
EOF
die Befehle im EOF-Block funktionieren auf meinem Host-Rechner, aber diese Befehle funktionieren nicht auf dem Remote-Rechner, wenn ich SSH verwende. Kann mir jemand helfen? TIA.
Antwort1
file_path="/home/user/script.sh"
sshpass -p 'pswd' ssh user@remote-01 "bash -s" <<EOF
sed -i -e '\|/tmp/xyz/file-[0-9]\.[0-9]\.[0-9]\.txt|s/old_string/new_string/' "$file_path"
EOF
Erläuterung
- Vorausgesetzt, Ihre
/home/user/script.sh
Datei ist auf dem Remote-M/C sichtbar, müssen Sie nicht zuerst nach Zeilennummern suchen, in denen dies///
Befehle ausgeführt werden müssen. Sie müssen auch erkennen, dasssed
dies möglich ist/regex/s///
, um die Zeilennummern auszuwählen, in denen die Subs erstellt werden.