gpt4 book ai didi

perl - 如何使用 Perl 有条件地用单个单词替换一行?

转载 作者:行者123 更新时间:2023-12-04 23:33:08 26 4
gpt4 key购买 nike

我想用"is"替换以"is"结尾的行,并将以“否”结尾的行替换为“否”。我必须申请一个大文件。

输入:

最大限度。 C 13 0.457 0.32 是
最大限度。是 13 0.232 0.33 否
最大限度。 S 1 0.315 0.87 否

输出:

是的

最佳答案

虽然保罗的回答是正确的,但我想指出还有另一种方式来看待您的问题。您的问题指出该行以"is"或“否”结尾。因此,您可以做的另一件事是拆分行并打印最后一个元素,如果它匹配"is"或“否”:

perl -lape'$_=$F[-1] if $F[-1]=~m/^(?:YES|NO)$/'

在您的示例中,所有行都以 YES 或 NO 结尾。如果输入中的所有行都是这种情况,则可以简化为:
perl -lape'$_=$F[-1]'

使用的 Perl 命令行标志的简短说明(您也可以在“perldoc perlrun”中阅读):
  • -l 用于在打印时自动截取输入字符串并附加“\n”。
  • -a 与“-n”或“-p”一起使用时,将空格上的输入行自动拆分为@F 数组。
  • -p 创建一个循环,该循环在给定的输入文件/s 的行上运行,并在您的代码运行后在最后进行“打印”。
  • -e 当然是在命令行上给出代码的标志

  • 所以基本上命令行标志完成了大部分工作。我唯一要做的就是将 $F[-1] (该行的最后一个元素)分配给 $_ ,这是由于“-p”而将被打印的内容。

    我的目标不是玩 Perl Golf 并向您展示回答问题的简短方法,相反,我试图指出,简单地从稍微不同的角度思考问题可以向您展示解决问题的不同方法,这可能变得更好/更优雅。所以请不要关注哪个解决方案更短,而是要考虑不同的人如何从不同的方向攻击这个简单的问题,以及如何做同样的事情。

    还有一点,你写了“我想替换一行”。如果您的意思是在输入文件中替换,“-i”(就地替换)命令行标志是您的 friend :
    perl -lapi.bak -e'$_=$F[-1]'

    关于perl - 如何使用 Perl 有条件地用单个单词替换一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2220955/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com