ssh を使用するリモート マシンで、行番号を使用して文字列を置き換えるために sed を使用する方法を教えてください。

ssh を使用するリモート マシンで、行番号を使用して文字列を置き換えるために sed を使用する方法を教えてください。

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

私のコードは次のようになります: 私のスクリプトファイルssh の

# 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 を使用しているときにこれらのコマンドがリモート マシンでは動作しません。誰か助けてくれませんか? TIA。

答え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

説明

  • /home/user/script.shファイルがリモート m/c 上で表示されていると仮定すると、コマンドをs///実行する必要がある行番号を最初に探す必要はありません。 サブを実行する行番号を選択できる点も理解する必要があります。sed/regex/s///

関連情報