如何在Perl中使用文件的每一行

时间:2018-02-05 15:49:50

标签: shell perl

我正在使用远程shell。

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

例如:

FirstHostName
SecondHostName
ThirdHostName
...

我想浏览文件的每一行,并按ssh [hostname]输入主机名。然后我将在每个循环中添加一些命令(在它进入之后)。

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

更新

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

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

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

close(FILE);

1 个答案:

答案 0 :(得分:1)

你的问题有点不清楚......

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

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

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

一些解释:

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