파일의 텍스트는 다음과 같습니다.
[homes]
comment = Home Directories
path =
browseable =
writable = yes
valid users = %S
valid users = MYDOMAIN\%S
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
나는 출력을 다음과 같이 원한다:
[homes]
comment = Home Directories
path = /data
browseable = yes
writable = yes
valid users = %S
valid users = MYDOMAIN\%S
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
나는 다음 명령을 사용하고 있습니다 :
sed -i "\#path# s#.*#& /data#" file
하지만 경로가 있는 파일의 모든 곳에서 변경됩니다.
누구든지 도와줄 수 있나요?
답변1
정규식을 더 구체적으로 만드세요.
sed '/path *= *$/ s#$#/data#' file.ini
이 표현식은 뒤에 /path *= *$/
(공백으로 둘러싸여 있을 수 있음) 있지만 공백 이외의 다른 것으로 끝나지 않는 모든 줄과 일치합니다. 실제 대체 항목은 줄 끝에 배치됩니다.path
=
/data
이것은 또한 작동합니다:
sed "s#path *= *$#& /data#" file.ini
수정하려는 INI 파일 부분을 더 구체적으로 지정해야 하는 경우 명령의 범위를 확장하십시오 s
.
sed '/\[homes\]/,/\[printers\]/ s#path *= *$#& /dev#' file.ini
그러면 해당 섹션에만 교체가 적용됩니다 [homes]
.
새 파일로 리디렉션하거나 -i
위의 솔루션 중 하나를 적절한 방식으로 사용하세요.