Есть ли в Perl замена команд оболочки для вырезания и вставки? - PullRequest
3 голосов
/ 12 ноября 2009

Однажды я увидел быструю и грязную реализацию Perl для команд linux вырезать и вставить. Это было что-то вроде perl 'print "$F1"' filename заменить команду с именем -f1 имени файла

Может кто-нибудь сказать мне, как прошел этот Perl? В частности, мне интересно, потому что это, в отличие от вырезания / вставки, будет работать так же и в средах Windows.

Ответы [ 4 ]

4 голосов
/ 12 ноября 2009

Знаете ли вы о Perl Power Tools ? Они являются реализациями ваших любимых команд Unix, но сделаны в Perl. Если у вас есть Perl, вы можете иметь свои любимые команды без акробатики в командной строке. PPT имеет как cut, так и paste.

Хотя многие люди указывали вам на некоторые perl переключатели, они забывают ссылаться на perlrun , который объясняет их все.

3 голосов
/ 12 ноября 2009

вырезано

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";
}
1 голос
/ 12 ноября 2009

Для вырезания: я думаю, что вы ищете решение perl -ane (-e выполняет следующий код, -an применяет @F = split (/\t/,$line) к каждой строке в файле). Так что-то вроде:

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

, что идентично:

cut -f1,2 file

Что касается вставки, я не уверен, как вы можете это сделать, но я думаю, что perl -ane может принимать несколько файлов в качестве ввода.

0 голосов
/ 24 сентября 2014

Perl эквивалент сокращения -c1-2

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

...