ssh를 사용하여 원격 시스템에서 줄 번호를 사용하여 문자열을 대체하기 위해 sed를 사용하는 방법은 무엇입니까?

ssh를 사용하여 원격 시스템에서 줄 번호를 사용하여 문자열을 대체하기 위해 sed를 사용하는 방법은 무엇입니까?

원격 컴퓨터에 있는 파일의 문자열을 바꾸려고 합니다. 먼저, grep 명령을 사용하여 줄 번호를 가져온 다음 해당 줄 번호를 사용하여 해당 줄에 있는 문자열을 바꿔야 합니다.

내 코드는 다음과 같습니다. 내 스크립트 파일sc.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

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///

관련 정보