특정 항목을 검색하고 [7_addons]
다음 항목만 바꾸려고 합니다.enabled=0
enabled=1
이 예에서는 다음과 같습니다.
sed -i -e 's#enabled=0#enabled=1#g' /etc/file.txt
enabled=0
..replace 에 표시된 모든 내용 이지만 검색 문자열 뒤에 오는 내용만 바꾸고 로 바꾸고 중지 file.txt
하고 싶습니다 .7_addons
=0
=1
답변1
enabled
첫 번째 줄 이후에 존재한다고 가정되는 파일의 줄을 바꾸려면 ed![7_addons]
ed -s input <<< $'/^\[7_addons\]$\n/^enabled=0\nc\nenabled=1\n.\nw\nq' > /dev/null
외부에서 시작하여 파일 ed
의 스크립트 모드에서 실행되어 input
ANSI 인용 문자열을 here 문자열로 전달한 다음 출력을 /dev/null로 리디렉션합니다. /dev/null 리디렉션은 작업을 수행하는 동안 발견된 행에 대한 보고서를 삭제합니다.
여기의 문자열은 \n
-로 구분된 다음 명령으로 구분됩니다.
/^\[7_addons\]$
-- 줄의[7_addons]
시작(^
)과 끝( ) 에서 정확하게 줄을 검색합니다.$
/^enabled=0$
--그 다음에다음 행을 앞으로 검색합니다.enabled=0
c
-- 이 줄을 바꾸세요enabled=1
——이 기사의 경우.
-- 대체 텍스트 끝w
--디스크에 파일 쓰기q
——편집 종료
이 예시 입력에서는 다음과 같습니다.
[1_addons]
enabled=0
foo=bar
[7_addons]
foo=baz
enabled=0
other=bat
[8_addons]
foo=quux
생성된 파일은 다음과 같습니다.
[1_addons]
enabled=0
foo=bar
[7_addons]
foo=baz
enabled=1
other=bat
[8_addons]
foo=quux
답변2
sed '/\[7_addons\]/{n;s/enabled=0/enabled=1/}'
[7_addons]
또는 와 사이에 다른 줄이 있는 경우 enabled=0
:
sed '/\[7_addons\]/,/enabled=/s/enabled=0/enabled=1/'
예:
$ cat foo
[2_foo]
enabled=0
[7_addons]
extra fluff
enabled=0
enabled=0
$ sed '/\[7_addons\]/,/enabled=/s/enabled=0/enabled=1/' foo
[2_foo]
enabled=0
[7_addons]
extra fluff
enabled=1
enabled=0
정규식을 좀 더 엄격하게 만들고 싶을 수도 있습니다. 질문의 데이터를 기반으로 그렇게 할 수는 없습니다.