뭔가를 바꾸려는 줄이 포함된 파일이 있습니다.
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
이렇게 하면 삽입하려는 문자열로 그 사이 와 바로 뒤에 오는 //
모든 내용이 대체 됩니다.: