Bash 스크립트에서 구성 파일에 줄을 추가하시겠습니까?

Bash 스크립트에서 구성 파일에 줄을 추가하시겠습니까?

구성 파일에서 한 줄을 찾을 위치를 파악한 다음 두 줄을 드롭다운하고 코드 한 줄을 삽입하려고 합니다. awk/sed에서 이 작업을 수행하려고 하는데 캐리지 리턴에서 멈췄습니다. 나는 awk/sed에 의존하지 않고 이 작업을 수행하기 위한 깔끔한 방법을 찾고 있습니다.

<Location />
  Order allow,deny
</Location>

그런 다음 블록 내부에 한 줄을 추가합니다.

<Location />
  Order allow,deny
  Allow all
</Location>

답변1

sed '/Order allow,deny/ aAllow all' < yourFile

그러면 수정된 파일이 다음으로 출력됩니다.표준 출력. 그 자리에서 수정하고 싶다면 (sed(1)):

-i[접미사], --in-place[=접미사]

          edit files in place (makes backup if SUFFIX supplied)

설명하다:

For each line that matches `/Order allow,deny/`:
     Execute command 'a' (append) with 'Allow all' as parameter

http://grymoire.com/Unix/sed.html더 많은 것을 배울 수 있는 훌륭한 자료입니다 sed.

답변2

awk이 목적으로 사용될 수 있습니다. 아래 스크립트는 <Location />태그가 발견된 경우에만 텍스트를 추가합니다.

awk '/\<Location \/\>/{ start=1 } {if(start) ++start; if(start==4) print "  Allow all"} 1' infile

다음 입력 파일의 경우:

stuff
<Location />
  Order allow,deny
</Location>
more
stuff

이 스크립트는 다음을 생성합니다.

stuff
<Location />
  Order allow,deny
  Allow all
</Location>
more
stuff

다음과 같이 여러 부분을 교체하려는 경우 동일한 스크립트를 쉽게 수정할 수 있습니다.

awk '/\<Location \/\>/{ start=1 } {if(start) ++start; if(start==4){print "  Allow all"; start=0}} 1' infile

답변3

Allow all맹목적으로 명령문을 추가하려는 경우 Order allow,deny다음이 sed작동합니다.

sed -i 's/Order\ allow,deny/Order\ allow,deny\nAllow\ all/' <inputfilename>

답변4

Ex 모드에서 Vim을 사용할 수 있습니다:

ex -sc '/Order allow,deny/a|Allow all' -cx file
  1. a텍스트 및 줄 바꿈 추가

  2. x저장하고 닫습니다

관련 정보