sshを使用してリモートシステムでsedを使用して文字列を行番号に置き換える方法は?

sshを使用してリモートシステムでsedを使用して文字列を行番号に置き換える方法は?

リモートコンピュータ上のファイルの文字列を置き換えようとしています。まず、grepコマンドを使用して行番号を取得し、その行の文字列をその行番号に置き換える必要がありました。

私のコードは次のとおりです。マイスクリプトファイルスクリプトファイル

# 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

EOFブロックのコマンドは私のホスト上で実行されますが、sshを使用するとリモートシステムでは機能しません。誰でも私を助けることができますか?ティア。

答え1

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

説明する

  • ファイルがリモートm / cに表示されると仮定すると、コマンドを実行する必要がある行番号を/home/user/script.sh最初に見つける必要はありません。また、設定したいサブウーファーを選択できる行番号s///も知っておく必要があります。sed/regex/s///

関連情報