【问题标题】:The perl -pe commandperl -pe 命令
【发布时间】:2015-11-05 05:05:23
【问题描述】:

所以我对perl -pe 命令进行了研究,我知道它从一个文件中获取记录并以另一个文件的形式创建输出。现在我对这行命令的工作方式有点困惑,因为它经过了一些修改,所以我无法弄清楚perl pe 在其中的作用究竟是什么。这是命令:

cd /usr/kplushome/entities/Standalone/config/webaccess/WebaccessServer/etc
(PATH=/usr/ucb:$PATH; ./checkall.sh;) | perl -pe "s,^,          ,g;"

知道它在这里是如何工作的吗?

在上面的声明中更令人困惑的是这部分:"s,^, ,g;"

任何帮助将不胜感激。如果你们需要更多信息,请告诉我。谢谢!

【问题讨论】:

标签: perl


【解决方案1】:

它只接受-e 标志(在本例中为s,^, ,g)给出的表达式,并在输入的每一行上执行它,将修改后的行(即表达式的结果)打印到输出。

表达式本身是一种称为正则表达式(或“regexp”或“regex”)的东西,它本身就是一个学习领域。快速搜索“正则表达式教程”和“正则表达式入门”会得到大量结果,因此这可能是一个不错的起点。

s,^, ,g 这个表达式在行首添加了十个空格,正如我之前所说,perl -p 将其应用于每一行。

【讨论】:

  • -e 选项接受整个程序(语句序列),而不仅仅是一个表达式。 s/// 不是一个正则表达式,它是一个替换运算符(但它的第一部分是一个正则表达式:s/REGEX/REPLACEMENT/)。
  • 是的,我本可以解释很多其他会让新程序员难以理解的事情。
  • 您本可以解释一些没有错的事情。另外,/g^ 没有意义,整个东西可以用-e '$_ = " $_"' 代替(这里应该有更多的空格,但显然cmets 将它们过滤掉)或-e '$_ = " " x 10 . $_',绕过整个正则表达式混乱。 (您的代码实际上添加了 11 个空格,尽管文本另有声明。)
  • 这不是 我的 代码,这是 OP 的代码,我只是想以他或她能理解的方式来解释它。如果您对此处的答案不满意,请丢掉筹码并发布您自己的答案。当你这样做时,我很乐意把它吹到死并犯下可怕的逻辑谬误。
  • OP 的代码增加了 10 个空格。你答案中的那个加了 11。
【解决方案2】:
"s,^,          ,g;"

s 用于替换。语法是s/somestring/replacement/
在您的命令中,, 是分隔符,而不是 /
g 用于全局工作,意味着替换所有出现。

例如:

perl -p -i -e "s/oldstring/newstring/g" file.txt;

在 file.txt 中,所有 oldstring 将替换为 newstring
i 用于就地文件编辑。

有关信息,请参阅这些文档:

perlre
perlretut
perlop

【讨论】:

  • 代码没有替换^^ 是一个正则表达式元字符,意思是“字符串的开头”(将g 与这样锚定的正则表达式一起使用是没有意义的)。
猜你喜欢
  • 2012-08-28
  • 2020-07-20
  • 2011-12-12
  • 2015-07-02
  • 2011-05-05
  • 2023-03-23
  • 2020-12-24
  • 1970-01-01
  • 2023-02-16
相关资源
最近更新 更多