【发布时间】:2017-02-27 02:32:56
【问题描述】:
我有一个命令行参数,需要将其转换为 shell 脚本。有人可以解释我怎么做吗?
如果是像下面这样简单的东西,这里如何处理大小写?
cat * |perl -ne '{chomp; print "$_\n" if ($_=~ /MAR-|-MAR/|/JAN-|-JAN/|/FEB-|-FEB/|/APR-|-APR/|/MAY-|-MAY/|/JUN-|-JUN/|/JUL-|-JUL/|/AUG-|-AUG/|/SEPT-|-SEPT/|/OCT-|-OCT/|/NOV-|-NOV/|/DEC-|-DEC/|/dec-|-dec/|/Aug-|-Aug/|/Jan-|-Jan/|/Sept-|-Sept/)|/Feb-|-Feb/|/Mar-|-Mar/|/Apr-|-Apr/|/May-|-May/|/Jun-|-Jun/|/Jul-|-Jul/|/Oct-|-Oct/|/Nov-|-Nov/}'|more
【问题讨论】:
-
看起来您在这里有两个不同的主题。你能把它们分成不同的问题吗?
-
您永远不必使用
cat来向 Perl 提供输入:只需将您的参数放在代码之后:perl -e'code here' *。尽管使用像*这样的 glob,您可能需要进行一些完整性检查以避免处理目录等。 -
另外,你的正则表达式有一个严重的错误:
/是你正则表达式中的一个元字符,你没有逃脱它。通常,您会收到类似Search pattern not terminated的错误,但实际上您已意外终止了您的错误。这:$_=~ /MAR-|-MAR/|/JAN-|-JAN/的意思是:$_ =~ m/MAR-|-MAR/ | $_ =~ /JAN-|-JAN/-- 带有|bitwise OR operator. 的两个表达式。