perl - অনুবাদ অনুবাদ


5

সোলারিসের জন্য নিম্নলিখিত কমান্ডটি সূক্ষ্মভাবে কাজ করে (কেবলমাত্র শেষ অক্ষরটি ":" হলে লাইনটি মুছুন)

 sed -e '/:$/d' < foo > foo.new

পার্ল একই কিভাবে করবেন? (এর কারণ কারণ আমি একটি নতুন ফাইল তৈরি করতে চাই না)

  perl -i -pe 's/:$/d' foo
  Substitution replacement not terminated at -e line 1.

উত্তর:


7

এর মতো কিছু:

perl -ne '/ / $ /' না হলে মুদ্রণ
পার্ল - 'মুদ্রণ যদি! /: $ /'
পার্ল -নে ​​'! /: $ / &&' মুদ্রণ

নোট করুন sed -iএবং উভয়ই perl -iএকটি অস্থায়ী ফাইল তৈরি করে এবং আসলটি প্রতিস্থাপন করে কাজ করে। যদি আপনি এটি এড়াতে চান তবেও ব্যবহার করুন ed:

এডি ফাইল << 'ইওএফ'
গ্রাম /: $ d /
wq লিখে
ফাইলের শেষে

দুর্দান্ত thx বরাদ্দ
yael

3

পার্ল একটি সেড টু পার্ল অনুবাদক নিয়ে আসে s2p। শুধু আগ্রহের জন্য, s2p '/:$/d'দেয়:

#!/usr/local/bin/perl -w
eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}'
  if 0;
$0 =~ s/^.*?(\w+)[\.\w+]*$/$1/;

use strict;
use Symbol;
use vars qw{ $isEOF $Hold %wFiles @Q $CondReg
             $doAutoPrint $doOpenWrite $doPrint };
$doAutoPrint = 1;
$doOpenWrite = 1;
# prototypes
sub openARGV();
sub getsARGV(;\$);
sub eofARGV();
sub printQ();

# Run: the sed loop reading input and applying the script
#
sub Run(){
    my( $h, $icnt, $s, $n );
    # hack (not unbreakable :-/) to avoid // matching an empty string
    my $z = "\000"; $z =~ /$z/;
    # Initialize.
    openARGV();
    $Hold    = '';
    $CondReg = 0;
    $doPrint = $doAutoPrint;
CYCLE:
    while( getsARGV() ){
        chomp();
        $CondReg = 0;   # cleared on t
BOS:;
# /:$/d
if( m /:$/s )
{ $doPrint = 0;
  goto EOS;
}

EOS:    if( $doPrint ){
            print $_, "\n";
        } else {
            $doPrint = $doAutoPrint;
        }
        printQ() if @Q;
    }

    exit( 0 );
}
Run();

# openARGV: open 1st input file
#
sub openARGV(){
    unshift( @ARGV, '-' ) unless @ARGV;
    my $file = shift( @ARGV );
    open( ARG, "<$file" )
    || die( "$0: can't open $file for reading ($!)\n" );
    $isEOF = 0;
}

# getsARGV: Read another input line into argument (default: $_).
#           Move on to next input file, and reset EOF flag $isEOF.
sub getsARGV(;\$){
    my $argref = @_ ? shift() : \$_;
    while( $isEOF || ! defined( $$argref = <ARG> ) ){
        close( ARG );
        return 0 unless @ARGV;
        my $file = shift( @ARGV );
        open( ARG, "<$file" )
        || die( "$0: can't open $file for reading ($!)\n" );
        $isEOF = 0;
    }
    1;
}

# eofARGV: end-of-file test
#
sub eofARGV(){
    return @ARGV == 0 && ( $isEOF = eof( ARG ) );
}

# makeHandle: Generates another file handle for some file (given by its path)
#             to be written due to a w command or an s command's w flag.
sub makeHandle($){
    my( $path ) = @_;
    my $handle;
    if( ! exists( $wFiles{$path} ) || $wFiles{$path} eq '' ){
        $handle = $wFiles{$path} = gensym();
        if( $doOpenWrite ){
            if( ! open( $handle, ">$path" ) ){
                die( "$0: can't open $path for writing: ($!)\n" );
            }
        }
    } else {
        $handle = $wFiles{$path};
    }
    return $handle;
}

# printQ: Print queued output which is either a string or a reference
#         to a pathname.
sub printQ(){
    for my $q ( @Q ){
        if( ref( $q ) ){
            # flush open w files so that reading this file gets it all
            if( exists( $wFiles{$$q} ) && $wFiles{$$q} ne '' ){
                open( $wFiles{$$q}, ">>$$q" );
            }
            # copy file to stdout: slow, but safe
            if( open( RF, "<$$q" ) ){
                while( defined( my $line = <RF> ) ){
                    print $line;
                }
                close( RF );
            }
        } else {
            print $q;
        }
    }
    undef( @Q );
}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.