【问题标题】:delete parts of text with perl用perl删除部分文本
【发布时间】:2014-03-28 13:49:12
【问题描述】:

我在 perl 脚本中有这样的文本字符串

PC i5-4570/4GB/500/DVD+/-RW Drive/-RW/FREE DOS/5Y Warranty

并且想要删除 / 中的几乎所有内容,例如上面的行看起来像

PC i5-4570 FREE DOS/5Y Warranty

有人可以帮忙吗?

谢谢

【问题讨论】:

  • 你必须准确地说你想要什么。 “/”中的几乎所有内容都不够。

标签: perl bash shell terminal


【解决方案1】:

在不知道您要做什么的情况下,我不得不猜测。我想知道这是否有帮助?它用斜线分割字符串,挑选出第一个和最后两个值,并将它们传递给sprintf 进行格式化。

use strict;
use warnings;

my $string = 'PC i5-4570/4GB/500/DVD+/-RW Drive/-RW/FREE DOS/5Y Warranty';

my @fields = split qr|/|, $string;

my $new_string = sprintf "%s %s/%s\n", @fields[0, -2, -1];

print $new_string, "\n";

输出

PC i5-4570 FREE DOS/5Y Warranty

【讨论】:

    【解决方案2】:

    对于该特定字符串,您可以按“/”字符拆分并连接您想要的部分。除非您想保留 DOS 和 5Y 之间的最后一个斜杠。我不确定这是否会有帮助,因为它不是通用解决方案,但这适用于该字符串,并且可以使用类似的模式。

    #!/usr/bin/perl
    $str = "PC i5-4570/4GB/500/DVD+/-RW Drive/-RW/FREE DOS/5Y Warranty";
    @splitStr = split('/',$str);
    print $splitStr[0] . " " . $splitStr[6] . "/" . $splitStr[7];
    

    输出:PC i5-4570 免费 DOS/5Y 保修

    【讨论】:

      【解决方案3】:

      和一个班轮

      echo "PC i5-4570/4GB/500/DVD+/-RW Drive/-RW/FREE DOS/5Y Warranty" | perl -p -i -e 's#(.*?)/.* (\w*/.*)$#$1 $2#g'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-04
        • 1970-01-01
        • 2013-01-09
        • 1970-01-01
        • 1970-01-01
        • 2021-08-23
        相关资源
        最近更新 更多