yae*_*ael 3 logs sed awk perl text-processing
我们想在 log4j 文件中添加以下几行
log4j.appender.DRFA=org.apache.log4j.RollingFileAppender
log4j.appender.DRFA.MaxBackupIndex=100
log4j.appender.DRFA.MaxFileSize=10MB
Run Code Online (Sandbox Code Playgroud)
但这些行必须在包含单词 - DatePattern的第一行之前,无论该行是否带有标记
#log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
Run Code Online (Sandbox Code Playgroud)
或者
log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
Run Code Online (Sandbox Code Playgroud)
注意 - 如果 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
Run Code Online (Sandbox Code Playgroud)
示例 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
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)
这将DatePattern在文件中出现第一个匹配项时打印三行。done然后设置标志以1阻止再次打印行。最后的尾随1导致输入数据中的每一行都被打印。
如果您希望在输出中的三行之后出现空行,请添加\n\n到最后一个字符串的末尾。
输出被写入newfile,如果awk没有遇到任何奇怪的错误,一旦awk进程终止,原始错误就会被替换为 this 。
在评论中要求:在匹配的行之后添加行,
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
Run Code Online (Sandbox Code Playgroud)
这会将1( 打印每个输入行并可以由 替换{ print }) 移动到模式匹配时触发的代码之前。
| 归档时间: |
|
| 查看次数: |
1622 次 |
| 最近记录: |