我正在尝试替换远程计算机上文件中的字符串。首先,我必须使用 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///
选择要制作低音炮的行号。