구성 파일에서 한 줄을 찾을 위치를 파악한 다음 두 줄을 드롭다운하고 코드 한 줄을 삽입하려고 합니다. 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
a
텍스트 및 줄 바꿈 추가x
저장하고 닫습니다