°í±Þ Bash ½ºÅ©¸³Æà °¡À̵å: Bash¸¦ ÀÌ¿ëÇÑ ½© ½ºÅ©¸³Æà ¿ÏÀü °¡À̵å | ||
---|---|---|
ÀÌÀü | 19Àå. Á¤±Ô Ç¥Çö½Ä(Regular Expressions) | ´ÙÀ½ |
Ç¥Çö½Ä(expression)À̶õ ¹®ÀÚ ±×´ë·ÎÀÇ ÀÇ¹Ì ÀÌ»óÀ¸·Î Çؼ®µÇ´Â ¸ÞŸ¹®ÀÚ(metacharacters)¶ó°í ºÎ¸£´Â ¹®ÀÚµéÀÇ ÁýÇÕÀ» ¸»ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ÀÎ¿ë ºÎÈ£(quote symbol)´Â ¾î¶² »ç¶÷ÀÌ ¸»ÇÑ °ÍÀ» ³ªÅ¸³» Áֱ⵵ ÇÏÁö¸¸ ¶ÇÇÑ ±× µÚ¿¡ ³ª¿À´Â ½Éº¼¿¡ ´ëÇؼ ¸ÞŸÀû Àǹ̸¦ ºÎ¿©Çϱ⵵ ÇÕ´Ï´Ù. Á¤±Ô Ç¥Çö½ÄÀº À¯´Ð½º¿¡ Ưº°ÇÑ Æ¯Â¡À» ºÎ¿©ÇÏ´Â ¹®ÀÚµé°ú ¸ÞŸ¹®ÀÚµéÀÇ ÁýÇÕÀÔ´Ï´Ù. [1]
Á¤±Ô Ç¥Çö½ÄÀº ÁÖ·Î ÅؽºÆ® Ž»ö°ú ¹®ÀÚ¿ Á¶ÀÛ¿¡ ¾²ÀÔ´Ï´Ù. Á¤±Ô Ç¥Çö½ÄÀº ÇϳªÀÇ ¹®ÀÚ¿Í ÀÏÄ¡(match)Çϰųª, ȤÀº ¹®ÀÚ¿ÀÇ ÀϺκÐ(substring)À̳ª Àüü ¹®ÀÚ¿ÀÎ ¹®ÀÚ ÁýÇÕµé°ú ÀÏÄ¡ÇÏ°Ô µË´Ï´Ù.
º°Ç¥(*)´Â ¹Ù·Î ¾ÕÀÇ ¹®ÀÚ¿À̳ª Á¤±Ô Ç¥Çö½Ä¿¡¼ 0°³ ÀÌ»ó ¹Ýº¹µÇ´Â ¹®ÀÚ¸¦ ³ªÅ¸³À´Ï´Ù.
"1133*" Àº 11 + Çϳª ÀÌ»óÀÇ 3 + °¡´ÉÇÑ ´Ù¸¥ ¹®ÀÚµé À» ³ªÅ¸³À´Ï´Ù: 113, 1133, 11312, ±âŸ µîµî.
Á¡(.)Àº ´º¶óÀÎÀ» Á¦¿ÜÇÑ ¿ÀÁ÷ ÇÑ °³ÀÇ ±ÛÀÚ¿Í ÀÏÄ¡ÇÕ´Ï´Ù. [2]
"13." Àº 13 + ºóÄÀ» Æ÷ÇÔÇÑ ÃÖ¼Ò ÇÑ ±ÛÀÚ ¸¦ ³ªÅ¸³À´Ï´Ù: 1133, 11333, ÇÏÁö¸¸ 13Àº µÚ¿¡ ÇÑ ±ÛÀÚ°¡ ºüÁ® Àֱ⠶§¹®¿¡ ¾Æ´Õ´Ï´Ù.
ij·µ(^)Àº ÁÙÀÇ ½ÃÀÛÀ» ³ªÅ¸³»Áö¸¸ °¡²û ¹®¸Æ¿¡ µû¶ó¼´Â Á¤±Ô Ç¥Çö½Ä¿¡¼ ¹®ÀÚ ÁýÇÕÀÇ Àǹ̸¦ ¹Ý´ë·Î Çؼ®ÇØ ÁÝ´Ï´Ù.
Á¤±Ô Ç¥Çö½ÄÀÇ Á¦ÀÏ ³¡¿¡ ³ª¿À´Â ´Þ·¯ Ç¥½Ã($)´Â ÁÙ ³¡°ú ÀÏÄ¡ÇÕ´Ï´Ù.
"^$" ´Â ºó ÁÙ°ú ÀÏÄ¡ÇÕ´Ï´Ù.
´ë°ýÈ£([...])´Â ´ÜÀÏ Á¤±Ô Ç¥Çö½Ä¿¡¼ Ç¥ÇöÇϱâ À§ÇØ ¹®ÀÚµéÀ» ÁýÇÕÀ¸·Î ¹¾î ÁÝ´Ï´Ù.
"[xyz]" ´Â x, y, z Áß¿¡ ÇÑ ±ÛÀÚ¿Í ÀÏÄ¡ÇÕ´Ï´Ù.
"[c-n]" ´Â c¿¡¼ n »çÀÌ¿¡ µé¾î ÀÖ´Â ÇÑ ¹®ÀÚ¿Í ÀÏÄ¡ÇÕ´Ï´Ù.
"[B-Pk-y]" ´Â B¿¡¼ P±îÁö ÁßÀ̳ª k¿¡¼ y±îÁö ÁßÀÇ ÇÑ ±ÛÀÚ¿Í ÀÏÄ¡ÇÕ´Ï´Ù.
"[a-z0-9]" ´Â ¼Ò¹®ÀÚ³ª ¼ýÀÚÁßÀÇ ÇÑ ¹®ÀÚ¿Í ÀÏÄ¡ÇÕ´Ï´Ù.
"[^b-d]" ´Â b¿¡¼ d»çÀÌÀÇ ¹®ÀÚ¸¦ Á¦¿ÜÇÑ ¸ðµç ¹®ÀÚ¸¦ ³ªÅ¸³À´Ï´Ù. ^Àº ¹Ù·Î µÚ¿¡ ³ª¿À´Â Á¤±Ô Ç¥Çö½ÄÀÇ Àǹ̸¦ ¹Ý´ë·Î Çؼ®ÇÏ°Ô ÇØ ÁÝ´Ï´Ù(´Ù¸¥ ¹®¸Æ¿¡¼ !ÀÇ ÀÇ¹Ì¿Í ºñ½ÁÇÔ).
¿©·¯°³ÀÇ ´ë°ýÈ£·Î ¹ÀÎ ¹®ÀÚµéÀº ÀϹÝÀûÀÎ ³¹¸» ÆÐÅÏÀ» ³ªÅ¸³À´Ï´Ù. "[Yy][Ee][Ss]"´Â yes, Yes, YES, yEs, µîµîÀ» ³ªÅ¸³À´Ï´Ù. "[0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]"´Â Áֹεî·Ï¹øÈ£¿Í ÀÏÄ¡ÇÕ´Ï´Ù.
¿ª½½·¡½¬(\)´Â Ư¼ö ¹®ÀÚ¸¦ ¿ø·¡ÀÇ ¹®ÀÚ Àǹ̴ë·Î Çؼ®ÇÏ°Ô ÇØÁÝ´Ï´Ù(escape).
"\$" ´Â Á¤±Ô Ç¥Çö½Ä¿¡¼ ÁÙ ³¡(end-of-line)À» ³ªÅ¸³»´Â Àǹ̴ë½Å "$" ¹®ÀÚ ±×´ë·Î Çؼ®ÇÏ°Ô ÇØÁÝ´Ï´Ù. ºñ½ÁÇÏ°Ô "\\"´Â ±×³É "\" ¹®ÀÚ ±× ÀÚü¸¦ ³ªÅ¸³À´Ï´Ù.
¹°À½Ç¥(?)´Â Àڱ⠾տ¡ ³ª¿À´Â Á¤±Ô Ç¥Çö½ÄÀÌ 0°³³ª ÇÑ°³ÀÎ °Í°ú ÀÏÄ¡ÇÏ°í, º¸ÅëÀº ÇÑ °³ÀÇ ¹®ÀÚ¿Í ÀÏÄ¡ÇÒ ¶§ ¾²ÀÔ´Ï´Ù.
´õÇϱâ(+)´Â Àڱ⠾տ¡ ³ª¿À´Â Çϳª ÀÌ»óÀÇ Á¤±Ô Ç¥Çö½Ä°ú ÀÏÄ¡ÇÕ´Ï´Ù. *¿Í ºñ½ÁÇÏ°Ô µ¿ÀÛÇÏÁö¸¸ ¹Ýµå½Ã Çϳª ÀÌ»ó°ú ÀÏÄ¡ÇÕ´Ï´Ù.
# GNU ¹öÀüÀÇ sed¿Í awk¿¡¼´Â "+"¸¦ ¾µ ¼ö ÀÖÁö¸¸, # À̽ºÄÉÀÌÇÁ(escape)¸¦ ÇØ Áà¾ß µË´Ï´Ù. echo a111b | sed -ne '/a1\+b/p' echo a111b | grep 'a1\+b' echo a111b | gawk '/a1+b/' # À§ÀÇ ¼¼°³´Â ¸ðµÎ´Â µ¿ÀÏÇÕ´Ï´Ù. # Thanks, S.C. |
À̽ºÄÉÀÌÇÁµÈ "Áß°ýÈ£"(\{ \})´Â ¹Ù·Î ¾Õ¿¡ ³ª¿Â Á¤±Ô Ç¥Çö½ÄÀÇ ºóµµ¼ö¸¦ ³ªÅ¸³À´Ï´Ù.
Áß°ýÈ£¸¦ À̽ºÄÉÀÌÇÁ ½ÃÅ°Áö ¾ÊÀ¸¸é Áß°ýÈ£ ¹®ÀÚ ±×´ë·Î Çؼ®µÇ±â ¶§¹®¿¡ ²À À̽ºÄÉÀÌÇÁ¸¦ ½ÃÄÑ¾ß ÇÕ´Ï´Ù. ÀÌ ¹æ¹ýÀº ±â¼úÀûÀ¸·Î º¼ ¶§, ±âº»ÀûÀÎ Á¤±Ô Ç¥Çö½ÄÀÇ ÀϺΰ¡ ¾Æ´Õ´Ï´Ù.
"[0-9]\{5\}" ´Â 0¿¡¼ 9±îÁöÀÇ ¹®ÀÚ°¡ Á¤È®È÷ 5¹ø ³ª¿À´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù.
°æ°í | |
"ÀüÅëÀû"ÀÎ awk¿¡¼´Â Áß°ýÈ£¸¦ Á¤±Ô Ç¥Çö½ÄÀ¸·Î ¾µ ¼ö ¾ø½À´Ï´Ù. ÇÏÁö¸¸, gawk¿¡¼ --re-intervalÀ» ÁÖ¸é Áß°ýÈ£¸¦ À̽ºÄÉÀÌÇÁ ½ÃÅ°Áö ¾Ê°íµµ Á¤±Ô Ç¥Çö½Ä¿¡¼ ¾µ ¼ö°¡ ÀÖ½À´Ï´Ù.
|
¼Ò°ýÈ£ÀÎ ( )´Â Á¤±Ô Ç¥Çö½Ä ±×·ìÀ» ¹¾îÁÝ´Ï´Ù. ´ÙÀ½¿¡ ¼³¸íÇÒ "|" ¿¬»êÀÚ¿Í °°ÀÌ ¾²¸é ¾ÆÁÖ ÁÁ½À´Ï´Ù.
| "or" Á¤±Ô Ç¥Çö½Ä ¿¬»êÀÚ´Â °¡´ÉÇÑ ¹®ÀÚµéÁß ¾î¶² °Í°úµµ ÀÏÄ¡ÇÕ´Ï´Ù.
bash$ egrep 're(a|e)d' misc.txt People who read seem to be better informed than those who do not. The clarinet produces sound by the vibration of its reed. |
POSIX ¹®ÀÚ Å¬·¡½º(POSIX Character Classes). [:class:]
ÀÏÄ¡ÇÏ´Â ¹®ÀÚÀÇ ¹üÀ§¸¦ ÁöÁ¤ÇÏ´Â ´Ù¸¥ ¹æ¹ýÀÔ´Ï´Ù.
[:alnum:] ´Â ¾ËÆĺªÀ̳ª ¼ýÀÚ¿Í ÀÏÄ¡ÇÏ°í [A-Za-z0-9] ¿Í °°Àº Ç¥ÇöÀÔ´Ï´Ù.
[:alpha:] ´Â ¾ËÆĺª°ú ÀÏÄ¡ÇÏ°í [A-Za-z] ¿Í °°Àº Ç¥ÇöÀÔ´Ï´Ù.
[:blank:] ´Â ºó ÄÀ̳ª ÅÇ°ú ÀÏÄ¡ÇÕ´Ï´Ù.
[:cntrl:] ´Â Á¦¾î ¹®ÀÚµé°ú ÀÏÄ¡ÇÕ´Ï´Ù.
[:digit:] ´Â 10Áø ¼ýÀÚµé°ú ÀÏÄ¡ÇÏ°í [0-9] ¿Í °°Àº Ç¥ÇöÀÔ´Ï´Ù.
[:graph:] (Ãâ·Â°¡´ÉÇÑ ±×·¡ÇÈ ¹®ÀÚµé). ¾Æ½ºÅ° 33 - 126 ÀÇ ¹®ÀÚµé°ú ÀÏÄ¡ÇÕ´Ï´Ù. ºó Ä ¹®ÀÚ°¡ Æ÷ÇÔµÇÁö ¾Ê´Â´Ù´Â °Í¸¸ Á¦¿ÜÇÏ°í´Â ¹Ø¿¡¼ ¼³¸íÇÒ [:print:] ¿Í °°½À´Ï´Ù.
[:lower:] ´Â ¾ËÆĺª ¼Ò¹®ÀÚ¿Í ÀÏÄ¡ÇÏ°í [a-z] ¿Í °°Àº Ç¥ÇöÀÔ´Ï´Ù.
[:print:] (Ãâ·Â °¡´ÉÇÑ ¹®ÀÚµé). ¾Æ½ºÅ° 32 - 126 ±îÁöÀÇ ¹®ÀÚµé°ú ÀÏÄ¡ÇÕ´Ï´Ù. À§¿¡¼ ¼³¸íÇÑ [:graph:] ¿Í °°Áö¸¸ ºó Ä ¹®ÀÚ°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.
[:space:] ´Â °ø¹é¹®ÀÚµé°ú ÀÏÄ¡ÇÕ´Ï´Ù(ºó Ä, ¼öÆòÅÇ).
[:upper:] ´Â ¾ËÆĺª ´ë¹®ÀÚ¿Í ÀÏÄ¡ÇÏ°í [A-Z] ¿Í °°Àº Ç¥ÇöÀÔ´Ï´Ù.
[:xdigit:] ´Â 16Áø¼ö ¼ýÀÚ¿Í ÀÏÄ¡ÇÏ°í [0-9A-Fa-f] ¿Í °°Àº Ç¥ÇöÀÔ´Ï´Ù.
Áß¿ä: POSIX ¹®ÀÚ Å¬·¡½º´Â º¸Åë Äõ¿ìÆÃÀ̳ª ÀÌÁß ´ë°ýÈ£([[ ]])¸¦ ÇØ Áà¾ß ÇÕ´Ï´Ù.
bash$ grep [[:digit:]] test.file abc=723ÀÌ ¹®ÀÚ Å¬·¡½ºµéÀº Á¦ÇÑµÈ È®Àå ÇüÅ·Πglobbing¿¡¼ ¾²ÀÏ ¼öµµ ÀÖ½À´Ï´Ù.
bash$ ls -l ?[[:digit:]][[:digit:]]? -rw-rw-r-- 1 bozo bozo 0 Aug 21 14:47 a33b½ºÅ©¸³Æ®¿¡¼ POSIX ¹®ÀÚ Å¬·¡½º°¡ ¾²ÀÌ´Â ¿¹Á¦´Â ¿¹ 12-14 ¿Í ¿¹ 12-15 ¸¦ Âü°íÇϼ¼¿ä.
Sed, awk, ÆÞÀº ½ºÅ©¸³Æ®¿¡¼ Á¤±Ô Ç¥Çö½ÄÀ» ÀÎÀÚ·Î ¹Þ¾Æ ÆÄÀÏÀ̳ª I/O ½ºÅ©¸²À» °É·¯Áְųª ÇÊÅ͸µ ÇØÁÝ´Ï´Ù. ÀÌ·± ¿¹Á¦´Â ¿¹ A-7 ¿Í ¿¹ A-12 ¸¦ Âü°íÇϼ¼¿ä.
Dougherty¿Í Robbins°¡ ¾´ "Sed & Awk"¿¡¼ Á¤±Ô Ç¥Çö½Ä¿¡ ´ëÇÑ ¿ÏÀüÇÏ°í ¸íÄèÇÑ »ç¿ë¹ýÀ» º¼ ¼ö ÀÖ½À´Ï´Ù(¼Áö»çÇ× Âü°í).
[1] | ¾î¶² ¸ÞŸ¹®ÀÚµµ Æ÷ÇÔÇÏÁö ¾Ê¾Æ¼ ¹®ÀÚ¿ ÀÚüÀÇ ¶æÀ» ±×´ë·Î °®°í ÀÖ´Â ¹®ÀÚ¿ÀÌ °¡Àå °£´ÜÇÑ ÇüÅÂÀÇ Á¤±Ô Ç¥Çö½ÄÀÔ´Ï´Ù. | |
[2] | sed, awk, grepÀº ÇÑ ÁÙ¿¡ ´ëÇؼ 󸮸¦ Çϱ⠶§¹®¿¡ ´º¶óÀÎÀ» ó¸®ÇÏÁö ¸ø ÇÕ´Ï´Ù. ´º¶óÀÎÀÌ µé¾î ÀÖ´Â ¿©·¯ ÁÙ¿¡ °ÉÄ£ Ç¥Çö½Ä¿¡¼ Á¡(.)Àº ´º¶óÀΰú ÀÏÄ¡ÇÕ´Ï´Ù.
|