【问题标题】:Is there a Perl substitute for the cut and paste shell commands?是否有 Perl 替代剪切和粘贴 shell 命令?
【发布时间】:2009-11-12 15:50:24
【问题描述】:

我曾经看到一个快速而肮脏的 Perl 实现,用于剪切和粘贴 linux 命令。有点像 perl 'print "$F1"' filename 替换 cut -f1 文件名命令

谁能告诉我这个 Perl 方法是怎样的?具体来说,我很感兴趣,因为这与剪切/粘贴不同,在 Windows 环境中也可以正常工作。

【问题讨论】:

  • 您可能需要考虑安装 cygwin,这样您就可以拥有(大部分)习惯于 linux 的命令行工具。 :)

标签: perl paste cut


【解决方案1】:

你知道Perl Power Tools吗?它们是您最喜欢的 unix 命令的实现,但在 Perl 中完成。如果你有 Perl,你可以在命令行上使用你最喜欢的命令,而不需要杂技。 PPT既有cut又有paste

尽管很多人向您指出了一些 perl 开关,但他们忘记了链接到 perlrun 来解释所有这些。

【讨论】:

  • ++! PPT是一个了不起的资源。如果您使用的是 win32 平台,它们会非常方便,并且它们展示了一些有趣的技术。
【解决方案2】:

剪切

perl -alpe'$_=$F[0]'
perl -alpe'$_="@F[1..3]"'

要提供自定义输入分隔符,

perl -F: -alpe'$_=$F[0]'

要更改输出分隔符,

perl -F: -alpe'$"=":";$_="@F[1..3]"'

grep,当你在它的时候,

perl -alne'print$F[0]if/blah/'

粘贴

没那么容易。

#!/usr/bin/perl
for (@ARGV ? @ARGV : qw(-)) {
    if ($_ eq '-') {push @files, *STDIN}
    else {open $files[@files], '<', $_}
}
while (grep defined, (@lines = map scalar <$_>, @files)) {
    chomp @lines;
    print join("\t", @lines), "\n";
}

【讨论】:

    【解决方案3】:

    对于 cut:我认为您正在寻找 perl -ane 解决方案(-e 执行以下代码,-an@F = split (/\t/,$line) 应用于文件中的每一行)。 所以像:

    perl -ane 'print "$F[0]\t$F[1]\n"' file
    

    等同于:

    cut -f1,2 file
    

    对于粘贴,我不确定您如何做到这一点,但我认为perl -ane 可以将多个文件作为输入。

    【讨论】:

    • 请注意,cut 会从最后一个字段中删除换行符,但 Perl 不会。表达式可能应该是 'chomp(@F); print "$F[0]\t$F[1]\n"' 来解决这个问题。
    • paste 是更多的工作。请参阅stackoverflow.com/questions/1636755/… 了解几种可能的实现
    【解决方案4】:

    perl 相当于 cut -c1-2

    perl -alne 'print substr($_,0,2)'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      相关资源
      最近更新 更多