加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 在大文件中搜索并添加模式

发布时间:2020-12-14 00:04:22 所属栏目:Linux 来源:网络整理
导读:我有一个很大的apache配置文件,在每个虚拟主机部分中,我想添加自己的日志条目.我想知道我是否可以用脚本来做. 我当前的配置文件是这样的; ServerName abc.com some information. … …… 我希望有类似的东西; ServerName abc.com CustomLog "/usr/local/logs
我有一个很大的apache配置文件,在每个虚拟主机部分中,我想添加自己的日志条目.我想知道我是否可以用脚本来做.

我当前的配置文件是这样的;

ServerName abc.com   
some information.   
…   
……

我希望有类似的东西;

ServerName abc.com    
CustomLog "/usr/local/logs/abc.com.log"    
some information.    
…   
……

有可能通过某种脚本吗?我有很多这样的虚拟主机条目,所以手动更新是不可能的..任何想法?

解决方法

awk可以更简单易用.

awk 'NR==3{print "my log"}1' INPUT_FILE

> NR是一个跟踪行号的内置变量.
>您还可以使用-v和变量名来动态传递值,而不是在脚本中对其进行硬编码.例如. awk -v line =“$var”’NR == line {print“my log”} 1’INPUT_FILE.在这种情况下,line是一个awk变量,$var可以是在awk范围之外定义的bash变量.

测试:

[jaypal:~/Temp] cat file
ServerName abc.com   
some information.   
…   
……  

[jaypal:~/Temp] awk 'NR==3{print "my log"}1' file # add log after 2 lines
ServerName abc.com   
some information.   
my log
…   
……  

[jaypal:~/Temp] awk 'NR==4{print "my log"}1' file # add log after 3 lines
ServerName abc.com   
some information.   
…   
my log
……  

[jaypal:~/Temp] var=2 # define a variable which holds the line number you want to print on
[jaypal:~/Temp] awk -v line="$var" 'NR==line{print "my log"}1' file
ServerName abc.com   
my log
some information.   
…   
……

在评论中,我看到了从匹配模式(ServerName,在此示例中)开始的3行之后添加日志的问题.为此,你可以尝试这样的事情 –

awk’/ ServerName / {a = NR; pr??int; next} NR ==(a 3){print $0; print“my log”; next} 1’file

[jaypal:~/Temp] awk '/ServerName/{a=NR;print;next} NR==(a+3){print$0;print "my log";next}1' file
ServerName abc.com   
some information.   
…   
……  
my log

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读