这很棒,但某些节索引名将无法使用,它具有数百种不同的索引名,所以我该如何匹配以[monitor:/// var / log和endwith消息,安全,cron,假脱机程序开头的每个节和audit.log]并更改索引名称,而无需修改不引用此节的任何索引名称[monitor:/// var / log / messages | secure | cron | maillog | spooler | audit.log] sourcetype = linux或无论索引=什么

@ user10965163你的意思是这样吗? regex101.com/r/MqBVFW/2或如果索引名称不能包含空格regex101.com/r/MqBVFW/3或如果要匹配其中一个单词并将其替换为索引值:regex101.com / r / MqBVFW / 4

这是我要匹配并修改索引名称和一些我不知道的索引名称的所有节,因此我希望脚本匹配此节并更改其具有的任何类型的索引名称[monitor:/// var / log / cron] sourcetype = linux_secure索引= [monitor:/// var / log / secure] sourcetype = linux_secure索引= power [monitor:/// var / log / messages] sourcetype = linux索引= power [monitor:// / var / log / spooler] sourcetype = syslog索引= linux [monitor:///var/log/audit/audit.log] sourcetype = syslog索引= [monitor:/// var / log / maillog] sourcetype = syslog索引=

@ user10965163像这样尝试regex101.com/r/KTUlut/1现在,您可以匹配所有变体并使用自己的替代品。

超级棒,应该是这样的perl -0p -i.bak -es#(monitor:/// var / log /(?:messages | secure | cron | spooler | audit / audit .log | maillog)( ?:(?: r。*){2})index =)。* $ 1secure_linuxinputs.conf

与此有关的错误,perl -0p -i.bak -es#(monitor:/// var / log /(?:messages | secure | cron | spooler | audit / audit .log | maillog)(?:(? : r。*){2})index =)。* $ 1secure_linuxinputs.conf

perl -0p -i.bak -es#(监视器:/// var / log /(?:消息|安全| cron |后台处理程序|审计/审计 .log |邮件日志)(?:(?: r。* ){2})index =)。*#$ 1secure_linux#ginputs.conf

请所有目录都在以下路径中:/ tmp / apps $,如果我站在该路径上并运行脚本,它会说没有这样的文件或目录。如何实现此perl -0p -i.bak -es#(monitor:/// var / log /(?:messages | secure | cron | spooler | audit / audit .log | maillog)(?:( ?: r。*){2})index =)。*#$ 1secure_linux_pr#g linux * / local / inputs.conf perl -0p -i.bak -es#(monitor:/// var / log /(?: messages | secure | cron | spooler | audit / audit .log | maillog)(?:(?: r。){2})index =)。*#$ 1secure_linux_np#g * linux * / local / inputs.conf _GWAS_pr_linux_t1 / local / inputs.conf _GWAS_np_linux_t1 / local / inputs.conf

我在ubuntu上对此进行了测试,并从与文件所在目录相同的目录运行它:perl -0p -i.bak -e s#(\[monitor:varlog(?:messages|secure|cron|spooler|auditaudit\.log|maillog)\](?:(?:

.*){2})index=).*#$1secure_linux_pr#g inputs.conf

inputs.conf位于此dir部署应用程序#_GWAS_pr_linux_t1 / local / inputs.conf,_GWAS_np_linux_t1 / local / inputs.conf中,因此,如果运行脚本,则说没有此类文件或目录Deployment-apps#sed -E / ^ / { h; b}; G; s / ^(index =)power n。*(messages | secure)$ / 1secure /; P; d input.conf _GWAS_pr_linux_t1 / local / inputs.conf _GWAS_pr_linux_t1 / local / inputs.conf

无法重新整理输入的目录路径。conf_GWAS_pr_linux_t1 / local / inputs.conf _GWAS_pr_linux_t1 / local / inputs.conf perl -0p -i.bak -es#(monitor:/// var / log /(?:messages | secure | cron | spooler | audit / audit .log | maillog)(?:(?: r。*){2})index =)。*#$ 1secure_linux_pr#g * linux * / local / inputs.conf

在注释中,您可以使用backticks设置代码部分的格式,使其读起来更好一些。你的操作系统是什么?您是否尝试从与文件相同的目录运行代码?您已经安装了perl吗?

我在此目录中大约有100多个应用程序,因此我将脚本放在Deployment-apps $中并运行它,运行后,它说没有这样的文件或目录,例如Deployment-apps $中的应用程序示例_GWAS_pr_linux_t1 /local/inputs.conf _GWAS_pr_linux_t1 / local / inputs.conf

请我如何做到这一点

该代码适用于单个文件,但文件和目录不适用于我,仍然出现错误:perl -0p -i.bak -es#(monitor:/// var / log /(?:messages | secure | cron | spooler | audit / audit .log | maillog)(?:(?: r。*){2})index =)。*#$ 1secure_linux_pr#g * linux * / local / inputs.conf

这些页面page1或page2可能会有所帮助

请给我更新这个谢谢