Wie verwende ich sed, um eine Zeichenfolge mithilfe der Zeilennummer auf einem Remotecomputer mithilfe von SSH zu ersetzen?

Wie verwende ich sed, um eine Zeichenfolge mithilfe der Zeilennummer auf einem Remotecomputer mithilfe von SSH zu ersetzen?

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.shDatei ist auf dem Remote-M/C sichtbar, müssen Sie nicht zuerst nach Zeilennummern suchen, in denen die s///Befehle ausgeführt werden müssen. Sie müssen auch erkennen, dass seddies möglich ist /regex/s///, um die Zeilennummern auszuwählen, in denen die Subs erstellt werden.

verwandte Informationen