sed는 나머지 줄 삭제를 방지합니다

sed는 나머지 줄 삭제를 방지합니다

뭔가를 바꾸려는 줄이 포함된 파일이 있습니다.

database.url=jdbc:mysql://my.sql.ip.address:mySqlPort/mySqlDbName?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull

IP 주소를 변경하고 싶다고 가정해 보겠습니다. 다음 sed명령을 사용했습니다.

sed -i -r 's/(database.url=jdbc:mysql:\/\/).+(:.+)/\1zizi/' myFile

이 출력은 다음과 같습니다.

database.url=jdbc:mysql://zizi

하지만 나는 원한다:

database.url=jdbc:mysql://zizi:mySqlPort/mySqlDbName?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull

내 것은 어떻게 써야 하나요 sed? 이 작업을 더 잘 수행하기 위해 사용할 수 있는 다른 명령이 있습니까?

답변1

두 번째 다음 캡처 그룹을 인쇄하세요 \2(귀하의 그룹을 수정하거나 향상시키지 않습니다 sed)

sed -i -r 's/(database.url=jdbc:mysql:\/\/).+(:.+)/\1zizi\2/' myFile

IP 매칭 부분만 변경하는 개선된 명령어입니다.

sed 's/[1-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/NEWIP/' infile.txt

다음으로 시작하는 줄에만 적용되는 경우 database.url:

sed '/^database\.url/ s/[1-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/NEWIP/' infile.txt

또는 더 유능 sed하거나 더 짧습니다.

sed 's/\([1-9]\)\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}/NEW/'

이는 일치가 아닌 정확한 IP 주소와 일치하도록 변경 및 개선될 수도 있습니다. 1.1.1.999유효하지 않은 IP로.

답변2

더 짧은sed방법:

sed 's~\(.*mysql://\)[^:]*~\1zizi~' file

산출:

database.url=jdbc:mysql://zizi:mySqlPort/mySqlDbName?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull

답변3

sed어떤 트릭도 필요 없는 짧은 솔루션:

$ sed 's#//[^:]*#//zizi#' file
database.url=jdbc:mysql://zizi:mySqlPort/mySqlDbName?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull

이렇게 하면 삽입하려는 문자열로 그 사이 와 바로 뒤에 오는 //모든 내용이 대체 됩니다.:

관련 정보