sed를 사용하여 줄에 삽입

sed를 사용하여 줄에 삽입

파일의 텍스트는 다음과 같습니다.

[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위의 솔루션 중 하나를 적절한 방식으로 사용하세요.

관련 정보