Guido Socher ±Û¾´ÀÌ ¼Ò°³: ±×´Â ¸®´ª½º°¡ ÀÚÀ¯ ½Ã½ºÅÛÀÌ°í, Àü¼¼°èÀÇ ¸®´ª½º »ç¿ëÀÚ¿Í ÇÔ²² ÀÏÀ» ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ ¸Å¿ì Áñ°Å¿î ÀÏÀ̱⠶§¹®¿¡ ¸®´ª½º¸¦ »ç¶ûÇÑ´Ù. ³²´Â ½Ã°£Àº ¿©ÀÚ Ä£±¸¿Í ÇÔ²² º¸³»°Å³ª, BBCÀÇ ¼¼°è ¶óµð¿À ¼ºñ½º¸¦ µè°Å³ª, ÀÚÀü°Å·Î ±³¿Ü¸¦ µ¹¾Æ´Ù´Ï°Å³ª ¸®´ª½º¸¦ °¡Áö°í ³í´Ù. ¸ñÂ÷: µé¾î°¡´Â ±Û °£´ÜÇÑ ¿¹Á¦ ¹®¹ý ±ÔÄ¢ Text¸¦ ÆíÁýÇÏ¸é¼ Á¤±Ô Ç¥Çö½Ä ¾²±â |
Á¤±Ô Ç¥Çö½Äµé¾î °¡±â Àü¿¡: Á¤±Ô Ç¥Çö½ÄÀº ¹®¸Æ ¹Î°¨(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´Â ÇÑ ¹®ÀÚ ÆÐÅÏÀÌ ÅؽºÆ®¿¡¼
¾ó¸¶³ª ÀÚÁÖ ¹Ýº¹µÇ´ÂÁö¸¦ °áÁ¤ÇÑ´Ù.
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¹ø º¯¼ö¸¦
½á¼ ÀÌ¿ëµÈ´Ù.
¿¹: ½Ä [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 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 ... ¼Ò½º Äڵ带 ÀÛ¼ºÇÏ¸é¼ 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 |