· 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
    You can do very well in speculation where land or anything to do with earth is concerned.


    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.0076 sec