나는 bash를 처음 접했고 다른 유사한 게시물을 이해하려고 노력했지만 그들이 내가 필요한 것을 수행하는지 잘 모르겠습니다.
변수를 사용하지 않고 검색하고 바꾸고 싶은 내용만 입력하면 잘 작동합니다. 그러나 변수를 전달하면 스크립트는 "host1" 문자열도 제거합니다. 이 섹션 앞에는 "host1"이 포함된 파일을 찾는 for 루프가 있습니다. arg1, 2, 3은 $1, $2, $3입니다.
input="$f"
while read -r line
do
sed "/"$arg2"/ s=192.168.10.*="$arg3"="
done < "$f"
"host1" 문자열이 포함된 줄의 IP를 바꾸고 싶습니다.
10.10.10.10 host1
답변1
$arg2
로 설정되어 host1
있고 $arg3
로 설정되어 있다고 가정하면 10.10.10.10
두 명령이 모두 sed
출력에서 제거됩니다.host1
문제는 일치하기 때문에 192.168.10.*
마지막 .*
항목이 줄 끝까지 일치하고 로 대체된다는 것입니다 10.10.10.10
.
노력하다:
arg2=host1
arg3=10.10.10.10
sed "/${arg2}/ s/192\.168\.10\.[0-9]\+/${arg3}/" /path/to/file