sed에서 변수를 사용하면 일치하는 문자열뿐만 아니라 전체 줄을 대체합니다.

sed에서 변수를 사용하면 일치하는 문자열뿐만 아니라 전체 줄을 대체합니다.

나는 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 

관련 정보