파일에서 일치하는 첫 번째 줄 앞에 여러 줄의 텍스트를 삽입합니다.

파일에서 일치하는 첫 번째 줄 앞에 여러 줄의 텍스트를 삽입합니다.

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

관련 정보