如何使用 sed 在使用 ssh 的远程计算机上使用行号替换字符串?

如何使用 sed 在使用 ssh 的远程计算机上使用行号替换字符串?

我正在尝试替换远程计算机上文件中的字符串。首先,我必须使用 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 时这些命令在远程计算机上不起作用。有人能帮我吗 ? 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///选择要制作低音炮的行号。

相关内容