파일 블록의 단어를 바꾸는 정규식?

파일 블록의 단어를 바꾸는 정규식?

만약 내가 가지고 있다면:

<Directory />
 words
 allow
 bus
</Directory>

허용을 다른 것으로 대체하고 다른 단어와 블록을 그대로 유지할 수 있는 정규식이 있습니까?

따라서 다음과 같아야 합니다.

<Directory />
 words
 not
 bus
</Directory>

또는

<Directory />
 words
 bus
</Directory>

그 단어를 다른 것으로 바꾸거나 빼버릴 것이기 때문이다. 나는 다음과 같이 정규식을 시도했습니다.

(<Directory />(\s|\w|\n)+)allow((\s|\n|\w)+</Directory>)

그것을 교체했지만 \1\n not \2허용을 교체하고 내가 원하지 않는 블록의 두 번째 절반을 제거했습니다.

그렇다면 블록의 단어를 대체하고 블록을 그대로 유지할 수 있는 정규식이 있습니까?

답변1

sed귀하가 보여준 것을 달성하는 간단한 방법 인 귀하의 특정 문제를 완전히 이해하지 못합니다 .

$ sed 's/\ballow\b/not/g' afile
<Directory />
 words
 not
 bus

단어를 문자열로만 바꾸 \b도록 보호합니다 (예 : . 해당 문자열이 포함된 줄을 삭제하려면 다음 명령을 사용할 수도 있습니다.allownotallowsed

$ sed '/\ballow\b/d' afile
<Directory />
 words
 bus
</Directory>

관련 정보