Home Map Index Search News Archives Links About LF
[Top Bar]
[Bottom Bar]
[Photo of the Author]
Guido Socher
±Û¾´ÀÌ ¼Ò°³: ±×´Â ¸®´ª½º°¡ ÀÚÀ¯ ½Ã½ºÅÛÀÌ°í, Àü¼¼°èÀÇ ¸®´ª½º »ç¿ëÀÚ¿Í ÇÔ²² ÀÏÀ» ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ ¸Å¿ì Áñ°Å¿î ÀÏÀ̱⠶§¹®¿¡ ¸®´ª½º¸¦ »ç¶ûÇÑ´Ù. ³²´Â ½Ã°£Àº ¿©ÀÚ Ä£±¸¿Í ÇÔ²² º¸³»°Å³ª, BBCÀÇ ¼¼°è ¶óµð¿À ¼­ºñ½º¸¦ µè°Å³ª, ÀÚÀü°Å·Î ±³¿Ü¸¦ µ¹¾Æ´Ù´Ï°Å³ª ¸®´ª½º¸¦ °¡Áö°í ³í´Ù.

ÇÊÀÚ¿¡°Ô ¸ÞÀÏ º¸³»±â


¸ñÂ÷:
µé¾î°¡´Â ±Û
°£´ÜÇÑ ¿¹Á¦
¹®¹ý ±ÔÄ¢
Text¸¦ ÆíÁýÇϸ鼭 Á¤±Ô Ç¥Çö½Ä ¾²±â

Á¤±Ô Ç¥Çö½Ä

[Illustration]

µé¾î °¡±â Àü¿¡: Á¤±Ô Ç¥Çö½ÄÀº ¹®¸Æ ¹Î°¨(context sensitive)ÇÑ Å½»öÀ» Çϰųª, ÅؽºÆ®¸¦ ¼öÁ¤ÇÒ ¶§ ¸Å¿ì ¸¹ÀÌ ¾²ÀδÙ. Á¤±Ô Ç¥Çö½ÄÀº ÁÁÀº ¿¡µðÅͳª, Æļ­ ÇÁ·Î±×·¥°ú ¾ð¾î¼¼ ¾²ÀδÙ.




µé¾î °¡´Â ±Û

Á¤±Ô Ç¥Çö½ÄÀÌ emacs³ª vi°°Àº ¿¡µðÅͳª grep/egrep °ú awk, perl , sed °°Àº ÇÁ·Î±×·¥¿¡¼­ »ç¿ëµÇ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù..

Á¤±Ô Ç¥Çö½ÄÀº Çâ»óµÈ ¹®¸Æ¹Î°¨(context sensitive) Ž»öÀ̳ª ÅؽºÆ®ÀÇ ¼öÁ¤ µî¿¡¼­ »ç¿ëµÈ´Ù. Á¤±Ô Ç¥Çö½ÄÀº ÅؽºÆ®ÀÇ ¹®ÀÚ¿­°ú ¸ÅÄ¡µÇ´Â, Çü½ÄÀÌ ¾ÆÁÖ Àß °®ÃçÁø Ç¥ÇöÀÌ´Ù.

ÇÊÀÚ´Â ¸î ³â Àü¿¡ Á¤±Ô Ç¥Çö½ÄÀ» ¾²´Â »ç¶÷À» º¸°í¼­ Á¤±Ô Ç¥Çö½Ä¿¡ ºüÁ® µé°Ô µÇ¾ú´Ù. Text¸¦ ÀÔ·ÂÇÏ´Â ÀÏ°ú ¼öÁ¤ÇÏ´Â ÀÏÀº º¸Åë ¸¹Àº ½Ã°£ÀÌ °É¸®°Ô µÇ°Ô ¸¶·ÃÀε¥, ±× »ç¶÷Àº ¸î Ãʸ¸¿¡ ÀÏÀ» ÇÏ°í ¸»¾Ò´Ù. È­¸é¿¡ Àִ ǥÇö½ÄÀ» ºÃÀ» ¶§ ÀÌÇØÇÒ ¼ö´Â ¾ø¾ú´Ù. Ç¥Çö½ÄÀº Á¡(.)°ú ½½·¡½¬(/)·Î ½ÃÀÛÇÏ°í ¸î¸î ¹®ÀÚÀÇ Á¶ÇÕÀ¸·Î ÀÌ·ç¾îÁ® ÀÖ¾ú´Ù. ±×¶§ºÎÅÍ Á¤±Ô Ç¥Çö½ÄÀÌ ¾î¶»°Ô µ¹¾Æ°¡´ÂÁö ¹è¿ì±â ½ÃÀÛÇß°í, °ð Á¤±Ô Ç¥Çö½ÄÀÌ ¾î·ÆÁö ¾Ê´Ù´Â °ÍÀ» ¾Ë¾Ò´Ù. ´Ü¼øÈ÷ °£´ÜÇÑ ¹®¹ý ±ÔÄ¢µé·Î ÀÌ·ç¾î Á³´Ù´Â °ÍÀ» ¾Ë¾Ò´Ù.

Á¤±Ô Ç¥Çö½ÄÀº À¯´Ð½º ȯ°æ¿¡¼­ ¸Å¿ì ¸¹ÀÌ »ç¿ëµÇ°í ÀÖÁö¸¸, 'Ç¥ÁØ Á¤±Ô Ç¥Çö ¾ð¾î'´Â ÀÖÁö ¾Ê´Ù. ¾à°£ º¯ÇüµÈ Ç¥Çö½ÄÀÌ ¸¹´Ù. ¿¹¸¦ µé¾î 'grep' ÇÁ·Î±×·¥¿¡µµ 'grep'°ú 'egrap'ÀÇ µÎ°¡Áö°¡ ÀÖ´Ù. À§ÀÇ µÎ ÇÁ·Î±×·¥Àº ¾à°£ ´Ù¸¥ Á¤±Ô Ç¥Çö½ÄÀ» »ç¿ëÇÑ´Ù. perlÀº °¡Àå ¸¹Àº Á¤±Ô Ç¥Çö½ÄÀ» °¡Áö°í ÀÖ´Ù. ´ÙÇàÀ̵µ ¸ðµç Ç¥Çö½ÄÀº °°Àº ¿ø¸®¸¦ °¡Áö°í ÀÖ´Ù. Çѹø¸¸ ÀÌ·± ±âº»ÀûÀÎ ¿ø¸®¸¦ ÀÌÇØÇÏ°í ³ª¸é, ¼­·Î ´Ù¸¥ Ç¥Çö½ÄÀÌ¶óµµ ½±°Ô ¹è¿ï ¼ö ÀÖÀ» °ÍÀÌ´Ù.

ÀÌ ±â»ç¿¡¼­´Â ±âº»ÀûÀÎ °Íµé¸¸ ¼Ò°³ÇÒ °ÍÀÌ°í, ³ª¸ÓÁö´Â µ¶ÀÚµéÀÌ Á÷Á¢ ¸Å´º¾ó ÆäÀÌÁö¸¦ º¸¸é¼­ ¼­·Î ´Ù¸¥ ÇÁ·Î±×·¥¿¡ ´ëÇؼ­ ¹è¿ï ¼ö ÀÖ´Ù.

°£´ÜÇÑ ¿¹Á¦

´ÙÀ½°ú °°Àº ȸ»çÀÇ ÀüÈ­¹øÈ£ ¸®½ºÆ®°¡ ÀÖ´Ù°í °¡Á¤À» Çغ¸ÀÚ.

Phone Name  ID
     ...
     ...
3412    Bob 123
3834  Jonny 333
1248   Kate 634
1423   Tony 567
2567  Peter 435
3567  Alice 535
1548  Kerry 534
     ...

500¸íÀÇ Á÷¿øÀ» °¡Áø ȸ»çÀÌ´Ù. À§ÀÇ ÆÄÀÏÀº ´Ü¼øÈ÷ ¾Æ½ºÅ° ÄÚµå·Î µÇ¾îÀÖ´Â Text ÆÄÀÏÀÌ´Ù. ÀüÈ­¹øÈ£°¡ 1·Î ½ÃÀ۵Ǵ »ç¶÷Àº 1¹ø °Ç¹°¿¡¼­ ±Ù¹«ÇÏ´Â »ç¶÷µéÀÌ´Ù. ¾î¶² »ç¶÷µéÀÌ 1¹ø °Ç¹°¿¡¼­ ±Ù¹«ÇÏ´ÂÁö ¾Ë°í ½ÍÀ¸¸é ¾î¶»°Ô ÇÏ¿©¾ß ÇÒ±î?

´ÙÀ½°ú °°Àº Á¤±Ô Ç¥Çö½ÄÀÌ ±× ´äÀ» ¸»ÇØ ÁØ´Ù :
grep '^1' phonelist.txt
or
egrep '^1' phonelist.txt
or
perl -ne 'print if (/^1/)' phonelist.txt

À§ÀÇ Ç¥Çö½ÄÀº ù ±ÛÀÚ°¡ 1ÀÎ ¸ðµç ÁÙÀ» ãÀ¸¶ó´Â Ç¥Çö½ÄÀÌ´Ù. "^"´Â ÁÙÀÇ ½ÃÀÛÀ» ³ªÅ¸³½´Ù. Áï ù ±ÛÀÚ°¡ 1ÀÎ ÁÙÀ» ãÀ¸¶ó´Â °ÍÀÌ´Ù.

The syntax rules

ÇÑ ¹®ÀÚ ÆÐÅÏ

±âº»ÀûÀÎ Á¤±Ô Ç¥Çö½ÄÀº ÇÑ ¹®ÀÚ ÆÐÅÏ(single-character pattern)À¸·Î ÀÌ·ç¾îÁ® ÀÖ´Ù. Á¤È®È÷ ÇÑ ¹®ÀÚ¿Í ¸Â´Â °æ¿ì¸¦ ¸»ÇÑ´Ù. ÇÑ ¹®ÀÚ ÆÐÅÏÀÇ ¿¹´Â À§¿¡ ÀÖ´Â 1À» ã´Â ¹®Á¦ÀÌ´Ù. ÇÑ ¹®ÀÚ¿Í ÇÊÀûÀ» ÇÑ´Ù.

´Ù¸¥ ÇÑ ¹®ÀÚ ÆÐÅÏÀÇ ¿¹´Â ´ÙÀ½°ú °°´Ù:
egrep 'Kerry' phonelist.txt

À§ÀÇ ÆÐÅÏÀº ´Ü¼øÈ÷ ÇÑ ¹®ÀÚ ÆÐÅÏÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´Ù.( K,e.. ¿Í °°Àº ¹®ÀÚ)

¹®ÀÚµéÀº ÇÔ²² ±×·ìÈ­ µÇ¾î ÁýÇÕÀÌ µÉ ¼ö ÀÖ´Ù. ÁýÇÕÀº '['·Î ½ÃÀÛÇؼ­ ']'·Î ³¡³ª°í, ±× »çÀÌ¿¡ ¹®ÀÚµéÀÌ ÀÖ´Â °ÍÀ» ¸»ÇÑ´Ù. ÁýÇÕ ¶ÇÇÑ ÇÑ ¹®ÀÚ ÆÐÅÏÀÌ´Ù. ÁýÇÕ ¾È¿¡ ÀÖ´Â ÇÑ ¹®ÀÚ ¸¸ÀÌ ÅؽºÆ®ÀÇ Å½»ö¿¡¼­ ¦À» ÀÌ·ê ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î :

[abc]    a, b ȤÀº c°¡ ¸ÅÄ¡µÇ´ÂÁö º¸´Â ÇÑ ¹®ÀÚ ÆÐÅÏÀÌ´Ù.  
         
[ab0-9]  a, b ȤÀº ¼ýÀÚ¿¡ ÇØ´çµÇ´ÂÁö¸¦
		 ³ªÅ¸³»´Â ÇÑ ¹®ÀÚ ÆÐÅÏÀÌ´Ù.
         
[a-zA-Z0-9\-] ´ë¹®ÀÚ, ¼Ò¹®ÀÚ, ¼ýÀÚ, À½¼ö ±âÈ£(-)ÀÇ ¸ÅÄ¡¸¦
			  ³ªÅ¸³»´Â ÇÑ ¹®ÀÚ ÆÐÅÏÀÌ´Ù.

´ÙÀ½°ú °°ÀÌ Çغ¸ÀÚ:
egrep '^1[348]' phonelist.txt

À§ÀÇ Ç¥Çö½ÄÀº 13, 14, 18·Î ½ÃÀ۵Ǵ ÁÙÀ» Ž»öÇÏ°Ô µÈ´Ù.

´ëºÎºÐÀÇ ¾Æ½ºÅ° ¹®ÀÚµéÀº ¸ÅÄ¡µÇ´ÂÁö¸¦ ¾Ë¾Æ º¸±â À§Çؼ­ ¾²Áö¸¸ Ưº°ÇÑ Àǹ̸¦ ³ªÅ¸³»´Â ¾Æ½ºÅ° ¹®Àڵ鵵 ÀÖ´Ù. ¿¹¸¦ µé¾î '['´Â ÁýÇÕÀÇ ½ÃÀÛÀ» ³ªÅ¸³½´Ù. '-'´Â ¹üÀ§¸¦ ³ªÅ¸³»´Â Ưº°ÇÑ Àǹ̸¦ °¡Áø ¹®ÀÚÀÌ´Ù. ÀÌ·¯ÇÑ ¹®ÀÚ¸¦ Àǹ̾øÀÌ ¾²·Á¸é ¹®ÀÚ ¾Õ¿¡ '\'¸¦ ºÙÀÌ¸é µÈ´Ù. [a-zA-Z0-9\-]°¡ ÀÌ·¯ÇÑ ¿¹ÀÌ´Ù. ÀϺΠº¯ÇüµÈ Á¤±Ô Ç¥Çö½Ä¿¡¼­´Â ¾à°£ ´Ù¸¥ Ç¥ÇöÀÌ ¾²ÀδÙ. Ưº°ÇÑ ¹®ÀÚ°¡ '\'¿Í ÇÔ²² ½ÃÀ۵Ǵ Á¤±Ô Ç¥Çö½ÄÀ» ¾²´Â °æ¿ìµµ ÀÖ´Ù. ÀÌ °æ¿ì ÀϹÝÀûÀÎ ¾Æ½ºÅ° ¹®ÀÚ¸¦ ³ªÅ¸³»±â À§ÇÏ¿© '\'¸¦ Á¦°ÅÇØ¾ß ÇÑ´Ù.

Á¡(.)Àº ¸Å¿ì Ưº°ÇÑ Àǹ̸¦ °¡Áø Ư¼ö ¹®ÀÚÀÌ´Ù. newline ¹®ÀÚ¸¦ Á¦¿ÜÇÑ ¸ðµç ¹®ÀÚ¸¦ ³ªÅ³½´Ù. ¿¹¸¦ µé¾î :

grep '^.2' phonelist.txt
 or
egrep '^.2' phonelist.txt

À§ÀÇ Ç¥ÇöÀº µÎ ¹ø° ¹®ÀÚ°¡ 2ÀÌ°í, ù ¹®ÀÚ´Â ¾Æ¹« ¹®ÀÚ³ª ³ª¿À´Â ÁÙÀ» Ž»öÇϴ ǥÇöÀÌ´Ù.

ÁýÇÕÀÇ Ã³À½À» '['·Î »ç¿ëÇÏÁö ¾Ê°í '[^'·Î »ç¿ëÇÏ¸é ¿ªÁýÇÕÀ» ³ªÅ¸³½´Ù. '['µÚ¿¡ ÀÖ´Â '^'´Â ÁÙÀ» ½ÃÀÛÀ» ³ªÅ¸³»Áö ¾Ê°í ¿ªÀ» ³ªÅ³½´Ù.

[0-9]    0°ú 9»çÀÌÀÇ ¼ýÀÚ¸¦ ³ªÅ¸³»´Â ÇÑ ¹®ÀÚ ÆÐÅÏÀÌ´Ù. 
[^0-9]   ¼ýÀÚ°¡ ¾Æ´Ñ ¹®ÀÚ¸¦ ³ªÅ¸³½´Ù.
[^abc]   a,b,c ¹®ÀÚ°¡ ¾Æ´Ñ ¸ðµç ¹®ÀÚ¸¦ ³ªÅ¸³½´Ù. 
 .       Á¡(.)Àº newline ¹®ÀÚ°¡ ¾Æ´Ñ ¸ðµç ¹®ÀÚ¸¦ ³ªÅ¸³½´Ù.
 		 Áï [^\n]¿Í °°´Ù.
1·Î ½ÃÀÛµÇÁö ¾Ê´Â ÁÙÀ» ã±â À§Çؼ­ ´ÙÀ½°ú °°ÀÌ ¾µ ¼ö ÀÖ´Ù  :

grep '^[^1]' phonelist.txt
or
egrep '^[^1]' phonelist.txt

Anchors

'^'°¡ ÁÙÀÇ ½ÃÀÛÀ» ³ªÅ¸³½´Ù°í À§Çؼ­ ¹è¿ü´Ù. Anchor´Â Á¤±Ô Ç¥Çö½Ä¿¡¼­ ¹®ÀÚÀÇ À§Ä¡¸¦ ³ªÅ¸³»°Å³ª ÅؽºÆ®¿¡ ¾ø´Â ¹®ÀÚ¸¦ ³ªÅ¸³»´Â Ưº°ÇÑ ¹®ÀÚÀÌ´Ù.

^  ÁÙÀÇ ½ÃÀÛÀ» ³ªÅ¸³½´Ù. 
$  ÁÙÀÇ ³¡À» ³ªÅ¸³½´Ù.

phonelist.txt¿¡¼­ ȸ»ç ID ¹øÈ£°¡ 567ÀÎ °ÍÀ» ã±â À§Çؼ­ ´ÙÀ½°ú °°ÀÌ ¾µ ¼ö ÀÖ´Ù :

egrep '567$' phonelist.txt

À§´Â ÁÙÀÇ ³¡ÀÌ 567ÀÎ ÁÙÀ» ã´Â´Ù.

Multipliers

Multiplier´Â ÇÑ ¹®ÀÚ ÆÐÅÏÀÌ ÅؽºÆ®¿¡¼­ ¾ó¸¶³ª ÀÚÁÖ ¹Ýº¹µÇ´ÂÁö¸¦ °áÁ¤ÇÑ´Ù.

descriptiongrepegrepperlvivimvileelvisemacs
0¹ø ÀÌ»ó********
1¹ø ÀÌ»ó\{1,\}++  \+\+\++
0¹ø ȤÀº 1¹ø\???  \=\?\=?
n¿¡¼­ m ¹ø\{n,m\}  {n,m}      \{n,m\}\{n,m\}

Note: ´Ù¾çÇÑ VI ÇÁ·Î±×·¥µéÀº À§¿Í °°Àº ÀÛ¾÷À» Çϱâ À§Çؼ­ ¸ÅÁ÷ ¿É¼ÇÀ» µÎ°í ÀÖ´Ù.

ÀüÈ­ ¹øÈ£ ¸®½ºÆ®¿¡¼­ÀÇ ¿¹:

....
1248   Kate 634
....
1548  Kerry 534
....

1·Î ½ÃÀÛÇÏ°í, µÚ¿¡ ¼ýÀÚ°¡ ¸î °³ ¿À¸ç, Àû¾îµµ ÇϳªÀÇ °ø¹éÀÌ ÀÖ°í, K·Î ½ÃÀÛÇÏ´Â À̸§À» ã±â À§Çؼ­´Â ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù.

grep '^1[0-9]\{1,\} \{1,\}K' phonelist.txt
¶Ç´Â *¿Í [0-9]¿Í °ø¹éÀ» ¹Ýº¹ÇÏ¿© :
grep '^1[0-9][0-9]*  *K' phonelist.txt
¶Ç´Â
egrep '^1[0-9]+ +K' phonelist.txt
¶Ç´Â
perl -ne 'print if (/^1[0-9]+ +K/)' phonelist.txt

'*'´Â ¹Ù·Î ¾Õ ÇÑ ¹®ÀÚÀÇ ¹Ýº¹À» ³ªÅ¸³½´Ù. Áï "23*4"´Â "2¿Í3, ¾Æ¹« ¹®ÀÚ³ª ¿©·¯ °³, 4"¸¦ ³ªÅ¸³»Áö ¾Ê´Â´Ù.(ÀÌÀÇ °æ¿ì "23.*4"ÀÌ´Ù.) À§ÀÇ ½ÄÀº "ÇÑ °³ÀÇ2, ¿©·¯ °³ÀÇ 3, ÇÑ °³ÀÇ4" ¸¦ ³ªÅ¸³½´Ù.

¶ÇÇÑ '*'´Â °Ô°É½º·´´Ù´Â(greedy) °É ¾Ë¾Æ¾ß ÇÑ´Ù. Áï, '*'´Â ÃÖ´ëÇÑ ¿À¸¥ÂÊÀ¸·Î È®ÀåÀ» ÇÑ´Ù.

The expression ^1.*4
À§ÀÇ ½ÄÀº ´ÙÀ½ ÁÙ Àüü¿Í ¸ÅÄ¡°¡ µÈ´Ù.
1548  Kerry 534
½ÃÀÛºÎÅÍ 4·Î ³¡³ª´Â °É ÀÇ¹Ì ÇÏÁö, 154¿Í ¸ÅÄ¡µÇÁö´Â ¾Ê´Â´Ù.

grep¿¡¼­´Â º°·Î Áß¿äÇÏÁö ¾ÊÁö¸¸, ¿¡µðÆ®¸¦ Çϰųª ´ëÄ¡¸¦ ÇÒ °æ¿ì ¸Å¿ì Áß¿äÇÏ´Ù.

Parentheses as Memory(¸Þ¸ð¸®·Î¼­ÀÇ °ýÈ£?)

'Parentheses as Memory' ±¸Á¶´Â Á¤±Ô Ç¥Çö½ÄÀÇ ¸ÅÄ¡ ¹æ¹ýÀº º¯ÇÏÁö ¾ÊÁö¸¸, °ýÈ£·Î ¹­ÀÎ ºÎºÐÀº ±â¾ïµÇ¾ú´Ù°¡ µÚ¿¡ ¾²ÀÏ ¼ö ÀÖ´Ù.

±â¾ïµÈ ºÎºÐÀº º¯¼ö¸¦ ÀÌ¿ëÇؼ­ µÚ¿¡ ÀÌ¿ëµÉ ¼ö ÀÖ´Ù. ù ¹ø° 'Parentheses as Memory' ±¸Á¶´Â 1 ¹ø º¯¼ö¸¦ ÅëÇؼ­ ÀÌ¿ëµÇ°í, µÎ ¹ø° 'Parentheses as Memory' ±¸Á¶´Â 2¹ø º¯¼ö¸¦ ½á¼­ ÀÌ¿ëµÈ´Ù.

ÇÁ·Î±×·¥ À̸§parentheses syntaxº¯¼ö ¹®¹ý
grep\(\)\1
egrep()\1
perl()\1 or ${1}
vi,vim,vile,elvis\(\)\1
emacs\(\)\1

¿¹:

 ½Ä  [a-z][a-z] Àº µÎ °³ÀÇ ¼Ò¹®ÀÚ¿Í ¸ÅÄ¡µÈ´Ù.  

ÀÌÁ¦ ¿ì¸®´Â 'otto'¿Í °°Àº ÅؽºÆ®¸¦ ã±â À§ÇÏ¿© º¯¼ö¸¦ ¾µ ¼ö ÀÖ´Ù.

egrep '([a-z])([a-z])\2\1'

º¯¼ö \1Àº 'o'¸¦ ÀúÀåÇÏ°í ÀÖ°í, \2´Â 't'¸¦ ÀúÀåÇÏ°í ÀÖ´Ù.

'anna'¿Í °°Àº À̸§°ú´Â ¸ÅÄ¡µÇÁö¸¸, 'yxyx'¿Í °°Àº À̸§°ú´Â 
¸ÅÄ¡µÇÁö ¾Ê´Â´Ù.

'Parentheses as Memory' ±¸Á¶´Â 'otto'³ª 'anna'¿Í °°Àº À̸§À» ã´Âµ¥´Â ¸¹ÀÌ ¾²ÀÌÁö ¾Ê°í, ´ë½Å ¿¡µðÆ®¸¦ Çϰųª, ´ëÄ¡(substitution)À» Çϴµ¥ ¸¹ÀÌ ¾²ÀδÙ.

Text¸¦ ÆíÁýÇϸ鼭 Á¤±Ô Ç¥Çö½Ä ¾²±â

¿¡µðÆ®¸¦ Çϱâ À§Çؼ­ vi³ª emacsȤÀº perl°ú °°Àº °ÍÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.

emacs¿¡¼­´Â M-x query-replace-regexp ȤÀº query-replace-regexp ¹öÆ°À» »ç¿ë»ç¿ëÇÑ´Ù. ¶Ç´Â replace-regexp ¸í·ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. query-replace-regexp¸¸ interactiveÇÏ°í, ³ª¸ÓÁö´Â ±×·¸Áö ¾Ê´Ù.

vi¿¡¼­´Â ´ëÄ¡ ¸í·ÉÀÌ %s/ / /gcÀÌ´Ù. ¿©±â¼­ '%'´Â 'ÆÄÀÏ Àüü'¸¦ ³ªÅ¸³½´Ù. ¾Æ´Ï¸é Àû´çÇÑ ¹üÀ§¸¦ ÁöÁ¤ÇØ ÁÙ ¼öµµ ÀÖ´Ù. vim¿¡¼­´Â shift-v¸¦ Ä£ ÈÄ¿¡ ´ëÄ¡Çϱ⸦ ¿øÇÏ´Â ºÎºÐÀ» ÁöÁ¤ÇØ ÁÙ ¼ö ÀÖ´Ù. ¿©±â¼­´Â vim¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀ» ÇØ ÁÙ ¼ö ¾ø´Ù. ¸Þ´º¾óÀ» ½º½º·Î º¸¶ó. 'gc'´Â interactiveÇÑ °ÍÀ» ³ªÅ¸³½´Ù. s/ / /g´Â interactiveÇÏÁö ¾ÊÀ½À» ³ªÅ¸³½´Ù.

interactiveÇÏ´Ù´Â °ÍÀº ¸ÅÄ¡µÇ´Â °ÍÀ» ¸¸³¯ ¶§¸¶´Ù, ´ëÄ¡¸¦ ÇÒ °ÍÀÎÁö ¾È ÇÒ °ÍÀÎÁö ¹°¾î º¸´Â °ÍÀ» ¸»ÇÑ´Ù.

perl¿¡¼­´Â ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

perl -pe 's/ / /g' 

¸î °¡Áö ¿¹¸¦ º¸ÀÚ. À§¿¡ ³ª¿Â ȸ»ç¿¡¼­ ÀüÈ­ ¹øÈ£°¡ ¹Ù²î¾î 1°ú 2·Î ½ÃÀÛÇÏ´Â ¹øÈ£´Â µÎ¹ø° À§Ä¡¿¡ 2°¡ Ãß°¡ µÇ¾ú´Ù. ¿¹¸¦ µé¾î 1423Àº 14223À¸·Î µÇ¾ú´Ù.

¿¹ÀüÀÇ ¸®½ºÆ® :

Phone Name  ID
     ...
3412    Bob 123
3834  Jonny 333
1248   Kate 634
1423   Tony 567
2567  Peter 435
3567  Alice 535
1548  Kerry 534
     ...

´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù:

vi:    s/^\(1.\)/\12/g
emacs: ^\(1.\)   replaced by  \12
perl:  perl -pe 's/^(1.)/${1}2/g' phonelist.txt

»õ·Î¿î ¸®½ºÆ®´Â ´ÙÀ½°ú °°À» °ÍÀÌ´Ù. Phone Name ID ... 3412 Bob 123 3834 Jonny 333 12248 Kate 634 14223 Tony 567 2567 Peter 435 3567 Alice 535 15248 Kerry 534 ...

PerlÀº ¸Þ¸ð¸® º¯¼ö¸¦ \1ºÎÅÍ \9±îÁö »ç¿ëÇϹǷΠ\12´Â ÅÖ ºñ¾îÀÖ´Â 12¹ø° º¯¼ö¸¦ ÂüÁ¶ÇÏ°í ÀÖ´Ù. ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇÏ¿© ´Ü¼øÈ÷ ${1}À» »ç¿ëÇÏ¸é µÈ´Ù.

À§ÀÇ ¸®½ºÆ®´Â ¾ÆÁ÷µµ ¾à°£ Á¤·ÄÀÌ À߸øµÇ¾î ÀÖ´Ù. ¾î¶»°Ô ÇÏ¸é °íÄ¥ ¼ö ÀÖÀ»±î? 5¹ø° À§Ä¡¿¡ °ø¹éÀÌ ÀÖ´ÂÁö ¾ø´ÂÁö °Ë»ç¸¦ ÇÏ°í, °ø¹éÀÌ ¾øÀ¸¸é ÇϳªÀÇ °ø¹éÀ» Áý¾î ³ÖÀ¸¸é µÈ´Ù.

vi:     s/^\(....\) /\1  /g
emacs:  '^\(....\) '  replaced by  '\1  '
perl:   perl -pe 's/^(....) /${1}  /g' phonelist.txt

ÀÌÁ¦ ¸®½ºÆ®´Â ´ÙÀ½°ú °°À» °ÍÀÌ´Ù.

Phone Name  ID
      ...
3412     Bob 123
3834   Jonny 333
12248   Kate 634
14223   Tony 567
2567   Peter 435
3567   Alice 535
15248  Kerry 534
      ...

¸¸¾à¿¡ ¼öÀÛ¾÷À» ÇÏ´Ù°¡ ÁÙÀÇ ½ÃÀÛ¿¡ ¸î °³ÀÇ °ø¹éÀ» ÀÔ·ÂÇß´Ù¸é °ø¹éµéÀ» ¾î¶»°Ô Á¦°ÅÇÒ ¼ö ÀÖÀ»±î?

Phone Name  ID
      ...
3412     Bob 123
     3834   Jonny 333
12248   Kate 634
14223   Tony 567
 2567   Peter 435
3567   Alice 535
  15248  Kerry 534
      ...

´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù. vi: s/^ *// (There is 2 spaces as we do not have a +) emacs: '^ +' replaced by the empty string perl: perl -pe 's/^ +//' phonelist.txt

¼Ò½º Äڵ带 ÀÛ¼ºÇϸ鼭 temp¶ó´Â º¯¼ö¿Í temporary¶ó´Â º¯¼ö¸¦ »ç¿ëÇÏ°í ÀÖ´Ù°í °¡Á¤À» ÇÏÀÚ. ±×·±µ¥ temp¸¦ counter·Î ¹Ù²Ù°íÀÚ ÇÑ´Ù. ´Ü¼øÈ÷ temp°¡ counter·Î ¹Ù²î¸é temporary´Â counterorary·Î ¹Ù²î¾î ¹ö¸°´Ù.

Á¤±Ô Ç¥Çö½ÄÀº ÀÌ·± ÀÏÀ» ÇÒ ¼ö ÀÖ´Ù. ´Ü¼øÈ÷ temp([^o])¸¦ counter\1·Î ¹Ù²Ù¸é µÈ´Ù. Áï, tempo°¡ ¾Æ´Ï¶ó°í ¸»ÇØÁÖ¸é µÈ´Ù. (Å©±âÀÇ °æ°èÀ» µÎ´Â ¹æ¹ýµµ ÀÖÁö¸¸, ¿ì¸®´Â ÀÌ·¯ÇÑ ¹æ½ÄÀÇ ÆÐÅÏÀ» ¹è¿ìÁö ¾Ê¾Ò´Ù.)

Regular expressions can do it. Just replace temp([^o]) with counter\1. That is, temp and not the letter o. (An alternative solution would be to use boundaries but we have not discussed this kind of anchoring pattern.)

ÀÌ ±ÛÀ» Àаí Èï¹Ì¸¦ ´À²¼À¸¸é ÇÏ´Â ¹Ù·¥ÀÌ´Ù. ÀÌÁ¦ ´ç½ÅÀº ÁÁ¾ÆÇÏ´Â ¿¡µðÅÍÀÇ ¸Ç ÆäÀÌÁö³ª, ¸Þ´º¾óÀ» º¸¸é¼­ ´õ¿í ÀÚ¼¼ÇÏ°Ô ¹è¿ö¾ß ÇÑ´Ù.

¶ÇÇÑ À§¿¡¼­ ¸»ÇÑ °æ°è³ª "or"¸¦ ³ªÅ¸³»´Â Ưº°ÇÑ ¹®ÀÚµµ ÀÖ´Ù.

Àç¹ÌÀÖ°Ô º¸¼Ì³ª¿ä? Á÷Á¢ Çغ¸¼¼¿ä..:)

¹ø¿ª : ÇãÁ¤¼ö


º» ȨÆäÀÌÁö´Â Miguel Angel Sepulveda´Ô²²¼­ °ü¸®ÇÏ°í ÀÖ½À´Ï´Ù.
© Guido Socher 1998
LinuxFocus 1998