log4jファイルに次の行を追加します
log4j.appender.DRFA=org.Apache.log4j.RollingFileAppender
log4j.appender.DRFA.MaxBackupIndex=100
log4j.appender.DRFA.MaxFileSize=10MB
ただし、これらの行は、Wordを含む最初の行の前にある必要があります-DatePattern、行がマーク付きかどうかに関係なく
#log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
または
log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
注-DatePatternWordがファイルに数回表示される場合は、次の3行のみを最初の行の前に設定する必要があります-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
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
の最初の一致が発生したときに、3行が出力されます。次に、フラグdone
が1
に設定され、行の再印刷が停止されます。末尾に1
が続くと、データ内のすべての行が印刷されます。
3行の後に出力に空の行が必要な場合は、最後の文字列の最後に\n\n
を追加します。
出力はnewfile
に書き込まれ、awk
で奇妙なエラーが発生しなかった場合、awk
プロセスが終了すると、元のエラーがこれに置き換えられます。
コメントで要求:行の追加after一致した行、
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 }
に置き換えることができます)を、パターンが一致したときにトリガーされるコードの前に移動します。
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
に末尾の円記号を入れません。
このクエリにもPerl
のタグを付けたので、次の1つの明白な方法があります。
Perl -pi -e '
print <<\EOF if /DatePattern/ && !$seen++;
log4j.appender.DRFA=org.Apache.log4j.RollingFileAppender
log4j.appender.DRFA.MaxBackupIndex=100
log4j.appender.DRFA.MaxFileSize=10MB
EOF
' input.file
注:追加されたテキストには、単独の行にスタンドアロンの文字列EOF
を含めないでください。ヒアドキュメントのバックスラッシュは、変数が展開されないようにするために必要です。
追加するテキストで上記の制約がわからない場合は、次のようにします。
Perl -pi -e '
next if !/DatePattern/ || $seen++;
open my $fh, "<", "file2add.txt" or die "Could not open file for reading:$!\n";
$_ = join "", <$fh>, $_;
' input.file
これは、標準のファイルエディタであるed
に適したジョブです。
/DatePattern/i
log4j.appender.DRFA=org.Apache.log4j.RollingFileAppender
log4j.appender.DRFA.MaxBackupIndex=100
log4j.appender.DRFA.MaxFileSize=10MB
.
wq