【问题标题】:How to use each line of a file in Perl [closed]如何在 Perl 中使用文件的每一行 [关闭]
【发布时间】:2018-02-05 15:49:49
【问题描述】:

我正在使用远程外壳。

我有一个包含主机名列表的文件,每个主机名都在单独的一行中。

例如:

FirstHostName
SecondHostName
ThirdHostName
...

我想遍历文件的每一行并通过ssh [hostname] 输入主机名。然后我会在每个循环中添加更多命令(在它进入之后)。

我该怎么做?假设我可以切换到每个主机名。

更新

我做了一些研究,我知道应该是这样的:

open(FILE, "hostnames.txt") or die("could not open file");

foreach $line ( <FILE> ) {
    ...
}

close(FILE);

【问题讨论】:

标签: shell perl


【解决方案1】:

你的问题有点不清楚……

  • 如果我们假设您想在每个系统上运行特定命令:

    perl -ne 's/^(.*)/ssh \1 some_command/; system $_' < hostnames.txt
    
  • 或者如果您想在远程机器上登录和注销后执行一些 perl 语句

    perl -ne 's/^(.*)/ssh \1/; system $_; statement' < hostnames.txt
    

一些解释:

  • perl -newhile(&lt;STDIN&gt;) { the_argument; } 循环中运行它后面的参数。所以它会读取输入中的每一行,将其放在$_ 中并一直执行此操作,直到没有更多输入为止。
  • &lt; hostnames.txt 将文件内容重定向到 perl 进程的 STDIN(标准输入)
  • s/^(.*)/ssh \1 some_command/ 是在$_ 上运行的正则表达式。第一部分^(.*) 表示“从行首开始的所有字符并记住它们”,ssh \1 表示“ssh 后跟我们记住的第一件事”。
  • some_command 登录后在远程机器上运行,完成后立即退出。
  • system $_ 执行 $_ 就好像它包含一个 shell 命令(现在是这样)
  • ; 让您可以将多个语句用作单个 arg 到 perl -ne

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多