· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Perl Commandline CookBook

Perl Commandline CookBook

PerlÀº ¸¹Àº ºÐ¾ß¿¡¼­ °­·ÂÇÑ ÈûÀ» °¡Áö°í ÀÖÁö¸¸ ½© Ä¿¸Çµå ¶óÀο¡¼­ ±âÁ¸ÀÇ awk¿Í sedµîÀ» ´ëüÇÏ°í ±×ÀÌ»óÀÇ ¸¹Àº ÀÏÀ» Çس¾ ¼ö ÀÖ´Â °­·ÂÇÑ µµ±¸ÀÔ´Ï´Ù. Ä¿¸Çµå¶óÀÎ ÆÞÀº "¾Æ´Â¸¸Å­ ¾²¸éµÈ´Ù"´Â ÆÞÀÇ ÀåÁ¡À» º¸¿©ÁÖ´Â °¡Àå ÁÁÀº ¿¹ÀÔ´Ï´Ù.

Ä¿¸Çµå ¶óÀο¡¼­ ¾µ¼ö ÀÖ´Â ´Ù¾çÇÑ Perl ÆÁÀ» ¸ð¾Æº¾½Ã´Ù. Perl¿ÜÀÇ ´Ù¾çÇÑ ¹æ¹ýµéµµ ÇÔ²² ¸ð¾Æ¼­ ºñ±³Çغ¸´Â °Íµµ ÁÁ°ÚÁÒ?

¹Ù·Î º¹»çÇؼ­ ¾µ ¼ö ÀÖ´Â CookBookÀ» ¸¸µå´Â °ÍÀÌ ¸ñÀûÀθ¸Å­ ÆÁµéÀ» ¹®¼­ÀÇ ¾ÕÀ¸·Î µ¹¸®°í ¹®¼­ÀÇ µÚÂÊ¿¡ Ä¿¸Çµå¶óÀÎ ¿É¼ÇÀ̳ª À¯¿ëÇÑ ¹®¹ý¿¡ ´ëÇØ Ãß°¡ÇÏ°Ú½À´Ï´Ù. -- pung96 2007-01-31 23:30:27

1.1. Perl Commandline ¿¹Á¦µé

1.1.1. ¸¹Àº ÆÄÀϵéÀ» Çѹø¿¡ »èÁ¦Çϱâ

find -name "*.log" -print | perl -nle unlink
find -name "*.log" -exec rm \{\} \;
find -name "*.log" -print | xargs rm
-exec¸¦ ÀÌ¿ëÇÑ ¹æ¹ýÀÌ °£´ÜÇϱâ´Â ÇÏÁö¸¸ °è¼Ó »õ·Î¿î ÇÁ·Î¼¼¼­¸¦ ¶ç¾î¾ß Çϱ⠶§¹®¿¡ perlÀ» ÀÌ¿ëÇÏ´Â ¹æ¹ýÀÌ ÈξÀ ºü¸¨´Ï´Ù. xargs ¿ª½Ã ¹ÞÀ» ÀÖ´Â ÀÎÀÚÀÇ °³¼ö°¡ ÇÑ°è°¡ Àֱ⠶§¹®¿¡ ¿©·¯¹øÀÇ ÇÁ·Î¼¼½º¸¦ ¶ç¾î¾ß ÇÒ °ÍÀ¸·Î ¿¹»óµË´Ï´Ù. perlÀº ÀÎÀÚ·Î ¹Þ´Â°ÍÀÌ ¾Æ´Ï±â ¶§¹®¿¡ ÇϳªÀÇ ÇÁ·Î¼¼½º·Î ¸ðµÎ ÇØ°áÇÒ ¼ö ÀÖ½À´Ï´Ù.

1000°³ Áö¿îÈÄ¿¡ 5ÃÊ ½¬µµ·Ï ÇÒ °æ¿ì
find -name "*.log" -print | perl -nle 'unlink; $.%1000==0 and sleep(10);'
  • $.Àº ÇöÀçÀÇ ¶óÀιøÈ£ º¯¼öÀÔ´Ï´Ù.

1.1.2. ¿©·¯ÁÙÀÇ µ¥ÀÌÅ͸¦ grepÇϱâ

perl -0777ne '/(START_FLAG.*?END_FLAG)/s and print $1' list.txt  # ÆÄÀÏÀÌ ÀÛÀ»¶§
perl -ne '/START_FLAG/ ... /END_FLAG/ and print;'               # ÆÄÀÏÀÌ Å¬¶§

1.1.3. ¸®½ºÆ® ºñ±³ : º¹ÀâÇÑ comm ±¸ÇöÇϱâ

±âº» ¾ÆÀ̵ð¾î´Â ¿©·¯ ÆÄÀÏÀ» Àо °¢ ¶óÀÎÀÇ Àû´çÇÑ ÆÐÅÏ È¤Àº Àüü ¶óÀÎÀ» Çؽ¬ Å°·Î ¸¸µé°í ¶óÀÎÀ» Çؽ¬ °ªÀ¸·Î ¸¸µé¾î¼­ °¢°¢ ÆÄÀÏ¿¡ ´ëÀÀµÇ´Â Çؽ¬¿¡ ÀúÀåÇÑ ÈÄ¿¡ Å°°¡ °¢ Çؽ¬¿¡ Á¸ÀçÇÏ´ÂÁö È®ÀÎÇÏ¿© Ãâ·ÂÇÕ´Ï´Ù. ÆíÀÇ»ó ½ºÅ©¸³Æ®¿¡¼­ ÁÖ·Î »ç¿ëÇÏÁö ¾Ê´Â ½Éº¼¸¯ ·¹ÆÛ·±½º¸¦ »ç¿ëÇß½À´Ï´Ù.
  • ±âº» ¸®½ºÆ®ºñ±³(comm)
comm, grep µîÀ» ÀÌ¿ëÇÑ ½¬¿î ¹æ¹ýµéÀÌ ¸¹±â´Â ÇÏÁö¸¸ ÆÐÅϸÅÄ¡¸¦ ÀÌ¿ëÇÑ ºñ±³¸¦ ´õ ½±°Ô ÀÌÇØÇϱâ À§Çؼ­ Àû¾îº¸¾Ò½À´Ï´Ù. °Ô´Ù°¡ Á¦ °æÇè»óÀ¸·Î´Â perlÀÇ commÀ̳ª grepº¸´Ù »¡¶ú½À´Ï´Ù(¾Æ¸¶ ¸Þ¸ð¸®´Â ´õ ¸¹ÀÌ »ç¿ëÇÒ °ÍÀÔ´Ï´Ù.).
# list1 °ú list2 ¸ðµÎ¿¡ ÀÖ´Â Ç׸ñ
grep -f list2 list1
perl -e '@a{@ARGV}=q(A..Z);while(<>){$a{$ARGV}->{$_}++};for(keys %A){print $_ if $B{$_}}' list1 list2
perl -ne 'BEGIN{@a{@ARGV}=(A..Z)}{$a{$ARGV}->{$_}++}END{for(keys %A){print $_ if $B{$_} } }' ls.log ls.log2

# list1 ¿¡¸¸ ÀÖ´Â Ç׸ñ
grep -vf list2 list1
perl -e '@a{@ARGV}=(A..Z);while(<>){$a{$ARGV}->{$_}++};for(keys %A){print $_ unless $B{$_}}' list1 list2

# list1 + list2
cat list1 list2 | uniq
perl -e 'while(<>){$A{$_}++};for(keys %A){print $_;};'

# ¼Óµµ´Â Á» ´À¸®Áö¸¸ °£´ÜÇÑ ¹æ¹ý
perl -e '@s{`cat OLD`}=( ); exists $s{$_} && print for `cat NEW`'
  1. $a{@ARGV}=(A..Z) : ÀÎÀÚµé·Î %AÇؽ¬¸¦ ä¿ó´Ï´Ù. $a{ù¹ø°ÀÎÀÚ}="A", $a{µÎ¹ø°ÀÎÀÚ}="B" ·Î Z±îÁö ä¿ï ¼ö ÀÖ½À´Ï´Ù.
  2. $a{$ARGV}->{$_}++ : <>³ª -n¿É¼ÇÀ¸·Î ÆÄÀÏÀ» ÀÐÀ»¶§ ÇöÀç ÀаíÀÖ´Â ÆÄÀÏÀÇ À̸§ÀÌ $ARGV·Î ÇÒ´çµË´Ï´Ù. À̶§ $a{$ARGV}´Â À§¿¡¼­ ÇÒ´çÇÑ °Íó·³ ÀÎÀÚ¼ø¼­´ë·Î A~Z°ªÀ» °¡Áö°í ÀÌ °ªÀ» ½Éº¼¸¯ ·¹ÆÛ·±½º·Î ÀÌ¿ëÇÏ¿© °á±¹¿¡´Â ù¹ø° ÆÄÀÏÀÇ °æ¿ì %A¿¡ µÎ¹ø° ÆÄÀÏÀº %B¸¦ »ç¿ëÇÕ´Ï´Ù. µû¶ó¼­ ù¹ø° ÆÄÀÏÀÇ °æ¿ì ÀÌ ÄÚµå´Â %A{$_}++ ·Î Çؼ®µË´Ï´Ù. $_´Â ÇöÀç ¶óÀÎ Àüü¸¦ ÀǹÌÇϹǷΠ¶óÀÎÀ» Å°·ÎÇÏ°í °ªÀº ÆíÀÇ»ó 1À» ´õÇÏ´Â ¹æ¹ýÀ» ¾¹´Ï´Ù.
  3. ÆÄÀÏÀ» ¸ðµÎ Àо °¢ Çؽ¬¸¦ ä¿îÈÄ %AÀÇ Å°µéÀ» Àо °¢ Å°¿¡´ëÇØ %B¿¡µµ °ªÀÌ Á¸ÀçÇÏ´Â Å°µéÀ» Ãâ·ÂÇϸé %A¿Í %BÀÇ Å° ±³ÁýÇÕÀ» ±¸ÇÒ ¼ö ÀÖ½À´Ï´Ù.

  • ÆÐÅÏ ¸ÅĪÀ» ÀÌ¿ëÇÑ ºñ±³
    patternÀÌ list1 °ú list2¿¡ ¸ðµÎ ¸ÅÄ¡µÇ´Â Ç׸ñÀÇ list1 Ç׸ñ. ¸»ÀÌ Á» º¹ÀâÇϳ׿ä.
    perl -e '@A{@ARGV}=qw(L R);while(<>){/(pattern)/ and $A{$ARGV}->{$1}=$_};for(keys %L){print $L{$_} if $R{$_};}' list1 list2
    


    • 3Áߺñ±³
      perl -e '@a{@ARGV}=(A..Z);while(<>){/(pattern)/ and $a{$ARGV}->{$1}=$_};for(keys %A){print $A{$_} if $B{$_}&&$C{$_} }' list1 list2
      

    1.1.4. ¿¢¼¿Ã³·³ Ä÷³ °è»êÇϱâ

    cat data.txt | perl -ane '{$avr=$F[2]+$F[3];$sum+=$avr;print "Avr is $avr\n";}END{print "Sum is $sum\n";}' 
    
    cat data.txt | awk '{avr=$1+$2;sum+=avr;print "Avr is "avr;}END{print "Sum is "sum;}'
    
    perl -nle '{/(pattern1).*(pattern2)/ and $avr=$1+$2 and $sum+=$avr and print "Avr is $avr"}END{print "Sum is $sum";}' data.txt
    

    1.1.5. ÆÄÀÏ ¼öÁ¤Çϱâ

    • oldpatternÀ» newstring·Î ¼öÁ¤ÇÏ°í ±âÁ¸ÀÇ ÆÄÀÏÀº *.bak·Î ¹é¾÷ÇÕ´Ï´Ù.
      perl -ibak -pe 's/oldpattern/newstring/g;'
      

    1.1.6. °¢ ¶óÀÎÀÇ ÆÐÅÏ¿¡ µû¶ó ´Ù¸¥ ÆÄÀÏ(pattern.txt)·Î ºÐ·ùÇϱâ

    perl -ne '{/(pattern)/ and $H{$1}.=$_;}END{for(keys %H){open F,">$_.txt";print F $H{$_};close F;}' data.txt
    
    • ÆÄÀÏ Àüü¸¦ Çؽ¬¿¡ ³Ö´Â ¹æ¹ýÀ̹ǷΠÆÄÀÏÀÌ Ä¿Áö¸é ¸Þ¸ð¸®¸¦ ¸¹ÀÌ »ç¿ëÇÑ´Ù´Â Á¡¿¡ À¯ÀÇÇØ¾ß ÇÕ´Ï´Ù. (¿äÁòÀº ¸Þ¸ð¸®°¡ Ä¿¼­ ¼ö¹é¸Þ°¡¹ÙÀÌÆ®ÀÇ ÆÄÀϵµ ó¸®ÇÒ ¼ö ÀÖÁÒ)

    1.1.7. ¼­ºêµð·ºÅ丮 grepÇϱâ

    grep -r pung96 *
    ¿¡ ´ëÀÀµÇ´Â Ç¥Çö
    find | perl -nle '$f=$_;-T $f or next;open(F,$f);while(<F>){/pung96/ and print "$f : $_";}'
    

    1.2. Perl Commandline Option


    ID
    Password
    Join
    Good news from afar can bring you a welcome visitor.


    sponsored by andamiro
    sponsored by cdnetworks
    sponsored by HP

    Valid XHTML 1.0! Valid CSS! powered by MoniWiki
    last modified 2007-09-06 09:13:11
    Processing time 0.0080 sec