【问题标题】:Search string, print line after string is found with further formatting perl搜索字符串,找到字符串后打印行,并进一步格式化 perl
【发布时间】:2014-11-02 04:16:30
【问题描述】:

我目前正在尝试编写一个脚本来确定服务器上的网站出了什么问题。我被困在我试图创建的变量上

my documentroot = 

文档根出现在apache配置文件/etc/httpd/conf/httpd.conf中,如下所示:

<VirtualHost 184.171.253.172:80>
    ServerName lernperl.com
    ServerAlias www.lernperl.com
    DocumentRoot /home/lernperl/public_html

所以,基本上我决定使用我的域变量 $host 作为域并搜索www.$domain.com,但是下一行对我来说很重要。理想情况下,我希望将/home/lernperl/public_html 放入一个标量中。这似乎很容易,但我一直在寻找答案。我很感激任何帮助!我没走多远。

open (configuration_file, "/etc/httpd/conf/httpd.conf");
my @list1 = <configuration_file>;close configuration_file;

【问题讨论】:

  • 所以您已经将整个配置文件加载到@list1... 现在您必须查找DocumentRoot 行。你都尝试了些什么?什么不起作用?
  • 经过长时间的谷歌搜索后,我能够进行打印工作。 use strict; use warnings; @ARGV = &lt;/etc/httpd/conf/httpd.conf&gt;; while ( &lt;&gt; ) { print scalar &lt;&gt; if /www.lernperl1.com/; } 但是这对我不起作用,因为我需要在变量中使用它。总的来说,我对 Perl 很陌生,将这段代码转换为变量是一项艰巨的任务。
  • 你想在变量中存储一些东西吗?如果是这样,您可以像这样设置一个标量变量:my $variable = "/home/lernperl/public_html";(或任何您想要的)。
  • 如果你是一个 perl 菜鸟,最好的办法是阅读一些教程,这样你就可以掌握基础知识。网上有很多教程——看看perl.org/learn.html,有一些你可以学习。

标签: apache perl scalar


【解决方案1】:

实现您想要做的最好的方法是使用正则表达式来捕获“DocumentRoot”之后的文本。要使用正则表达式的结果设置变量的内容,您可以执行以下操作:

if ($line =~ /DocumentRoot (.*?)$/) {
    my $variable = $1;
}

perl regular expressions tutorial 中有关 perl 正则表达式的更多信息。

Apache 配置文件可能包含多个 DocumentRoot 和 ServerName,因此您的脚本需要处理这种情况。

祝你好运。

【讨论】:

  • 看起来 OP 正在尝试将 Apache 配置文件的一部分读入变量;您只是在向他们展示如何对路径进行硬编码。
  • TBH 如果 OP 不知道如何设置变量,他们需要先阅读一些介绍性 perl 文档,然后再继续。
  • 我同意 OP 需要阅读教程,但他们显然确实知道如何分配给变量,因为他们在问题中包含了这个 sn-p:@ 987654324@ 他们遇到的问题似乎是在数组中找到匹配的行。
  • 西装是正确的。我对哈希、标量和数组了如指掌。我试图通过读取文件将 /home/lernperl/public_html 放入标量中,查找 ServerAlias www.lernperl.com,转到它下面的行,然后 awk '{print $2}'。在这一点上,我可能只会使用反引号并在 bash 中完成。
  • 好的,在这种情况下你需要perldoc.perl.org/perlretut.html - perl 正则表达式教程。如果您能更清楚地说明问题,也会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 2013-05-02
  • 2019-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多