![파일에서 일치하는 첫 번째 줄 앞에 여러 줄의 텍스트를 삽입합니다.](https://linux55.com/image/138171/%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%EC%B2%AB%20%EB%B2%88%EC%A7%B8%20%EC%A4%84%20%EC%95%9E%EC%97%90%20%EC%97%AC%EB%9F%AC%20%EC%A4%84%EC%9D%98%20%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC%20%EC%82%BD%EC%9E%85%ED%95%A9%EB%8B%88%EB%8B%A4..png)
log4j 파일에 다음 줄을 추가하겠습니다.
log4j.appender.DRFA=org.apache.log4j.RollingFileAppender
log4j.appender.DRFA.MaxBackupIndex=100
log4j.appender.DRFA.MaxFileSize=10MB
하지만 이 줄은 -라는 단어가 포함된 첫 번째 줄 앞에 와야 합니다.날짜 패턴, 라인 표시 여부에 관계없이
#log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
또는
log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
참고 - 파일에 DatePattern이라는 단어가 여러 번 나타나는 경우 DatePattern을 포함하는 첫 번째 줄 앞에만 이 세 줄을 설정해야 합니다.
예시 1(예상 출력)
log4j.appender.DRFA=org.apache.log4j.RollingFileAppender
log4j.appender.DRFA.MaxBackupIndex=100
log4j.appender.DRFA.MaxFileSize=10MB
#log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
예시 2(예상 출력)
log4j.appender.DRFA=org.apache.log4j.RollingFileAppender
log4j.appender.DRFA.MaxBackupIndex=100
log4j.appender.DRFA.MaxFileSize=10MB
log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
답변1
사용 awk
:
awk 'done != 1 && /DatePattern/ {
print "log4j.appender.DRFA=org.apache.log4j.RollingFileAppender"
print "log4j.appender.DRFA.MaxBackupIndex=100"
print "log4j.appender.DRFA.MaxFileSize=10MB"
done = 1
} 1' file >newfile && mv newfile file
DatePattern
파일에서 첫 번째 일치가 발생하면 세 줄이 인쇄됩니다. 그런 다음 해당 줄이 다시 인쇄되지 않도록 done
플래그를 설정합니다 . 1
끝에 후행이 있으면 1
데이터의 모든 줄이 인쇄됩니다.
출력에서 세 줄 뒤에 빈 줄을 원하면 \n\n
마지막 문자열 끝에 추가하세요.
출력이 기록되고 newfile
, awk
이상한 오류가 발생하지 않으면 awk
프로세스가 종료되면 원래 출력이 교체됩니다.
댓글로 요청사항: 줄 추가뒤쪽에일치하는 라인,
awk '1; done != 1 && /DatePattern/ {
print "log4j.appender.DRFA=org.apache.log4j.RollingFileAppender"
print "log4j.appender.DRFA.MaxBackupIndex=100"
print "log4j.appender.DRFA.MaxFileSize=10MB"
done = 1
}' file
패턴이 일치할 때 실행되는 코드 앞으로 이동 합니다 1
(각 입력 줄은 인쇄되고 로 대체될 수 있음 ).{ print }
답변2
귀하의 질문을 올바르게 이해했다면 다음 줄만 바꾸면 됩니다.
log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
-or-
#log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
다음 줄을 사용하십시오.
log4j.appender.DRFA=org.apache.log4j.RollingFileAppender
log4j.appender.DRFA.MaxBackupIndex=100
log4j.appender.DRFA.MaxFileSize=10MB
log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
-or-
#log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
이 GNU sed
명령을 사용하면 다음과 같은 작업을 수행할 수 있습니다.
$ sed -i 's/\(.*appender.DRFA.DatePattern=.*\)/log4j.appender.DRFA=org.apache.log4j.RollingFileAppender\nlog4j.appender.DRFA.MaxBackupIndex=100\nlog4j.appender.DRFA.MaxFileSize=10MB\n\n\n\1/' log4j.properties
라인 복사에 대해. 이 어펜더를 두 번 이상 정의하지 마세요.
appender.DRFA.DatePattern
DatePattern
따라서 우리는 찾고 있는 행 보다 더 구체적으로 이 이벤트를 찾을 수 있습니다 .
예제 실행
다음 줄만 포함된 샘플 파일은 다음과 같습니다.
$ cat log4j.properties
#log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
sed
파일에 대해 위 명령을 실행합니다.
$ cat log4j.properties
log4j.appender.DRFA=org.apache.log4j.RollingFileAppender
log4j.appender.DRFA.MaxBackupIndex=100
log4j.appender.DRFA.MaxFileSize=10MB
#log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
답변3
이를 사용하면 GNU sed
다음과 같이 처리할 수도 있습니다.
sed -i -e '
/DatePattern/!b
i\
log4j.appender.DRFA=org.apache.log4j.RollingFileAppender\
log4j.appender.DRFA.MaxBackupIndex=100\
log4j.appender.DRFA.MaxFileSize=10MB
:a;n;$!ba
' input.file
DatePattern
파일의 마지막 줄에 있을 수 없다고 확신하는 경우 다음과 같이 할 수도 있습니다.
sed -i -e '
/DatePattern/!b
r file2add.txt
N;:a;n;$!ba
' input.file
파일에 추가하려는 모든 줄을 배치합니다(예: file2add.txt
.) 참고: 이 방법을 사용하면 파일에 후행 백슬래시를 추가하지 않습니다 file2add.txt
.
답변4
이것은 ed
표준 파일 편집기에 매우 적합한 작업입니다.
/DatePattern/i
log4j.appender.DRFA=org.apache.log4j.RollingFileAppender
log4j.appender.DRFA.MaxBackupIndex=100
log4j.appender.DRFA.MaxFileSize=10MB
.
wq