4

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

有人能告诉我这种 Perl 方式如何吗?具体来说,我很感兴趣,因为这与剪切/粘贴不同,在 Windows 环境中也同样有效。

4

4 回答 4

5

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

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

于 2009-11-12T20:13:27.907 回答
3

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";
}
于 2009-11-12T15:58:20.623 回答
1

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

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

这等同于:

cut -f1,2 file

对于粘贴,我不确定您如何执行此操作,但我认为perl -ane可以将多个文件作为输入。

于 2009-11-12T15:53:20.800 回答
0

Perl 相当于 cut -c1-2

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

于 2014-09-24T04:01:58.717 回答