Go to the first, previous, next, last section, table of contents.


¹®¼­¸¦ ó¸®ÇÏ´Â ¸ÅÅ©·Î

m4¿¡´Â ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î ¹®¼­¸¦ ó¸®ÇÏ´Â ³»Àå ¸ÅÅ©·Î°¡ ¸¹ÀÌ ÀÖ´Ù. °¡·É, ¹®ÀÚ¿­ Áß¿¡¼­ ÀϺκи¸À» »Ì¾Æ³½´ÙµçÁö, ¶Ç´Â °Ë»öÇÑ´ÙµçÁö, ´ëÄ¡ÇÑ´ÙµçÁö ÇÏ´Â µîµîÀÇ ±â´ÉÀÌ ÀÖ´Ù.

¹®ÀÚ¿­ÀÇ ±æÀ̸¦ °è»ê

¹®ÀÚ¿­ÀÇ ±æÀÌ´Â lenÀ¸·Î °è»êÇÒ ¼ö ÀÖ´Ù.

len(string)

ÀÌ°ÍÀº stringÀÇ ±æÀÌ(10Áø¼ö)·Î È®ÀåµÈ´Ù.

len()
=>0
len(`abcdef')
=>6

ÀÌ ³»Àå ¸ÅÅ©·Î lenÀº ´ÜÁö ÀÎÀÚ°¡ ÀÖÀ» ¶§¿¡¸¸ ÀνĵȴÙ.

¹®ÀÚ¿­ ¼Ó¿¡¼­ ƯÁ¤ ¹®ÀÚ¿­ ã±â

¹®ÀÚ¿­ ¼Ó¿¡¼­ ƯÁ¤ ¹®ÀÚ¿­ÀÇ À§Ä¡¸¦ index·Î ãÀ» ¼ö ÀÖ´Ù.

index(string, substring)

ÀÌ°ÍÀº string¿¡¼­ substringÀÌ Ã³À½À¸·Î ³ªÅ¸³ª´Â À妽º·Î È®ÀåµÈ´Ù. stringÀÇ Ã¹ ¹®ÀÚÀÇ À妽º´Â 0ÀÌ´Ù. substringÀÌ string ¾È¿¡ ³ªÅ¸³ªÁö ¾Ê´Â´Ù¸é index´Â `-1'·Î È®ÀåµÈ´Ù.

index(`gnus, gnats, and armadillos', `nat')
=>7
index(`gnus, gnats, and armadillos', `dag')
=>-1

³»Àå ¸ÅÅ©·Î index´Â ÀÎÀÚ°¡ ÀÖÀ» ¶§¿¡¸¸ ÀνĵȴÙ.

Á¤±Ô Ç¥Çö½Ä °Ë»öÇϱâ

Á¤±ÔÇ¥Çö½Ä °Ë»öÀº ³»Àå ¸ÅÅ©·Î regexp·Î ÇÒ ¼ö ÀÖ´Ù.

regexp(string, regexp, opt replacement)

ÀÌ°ÍÀº string¿¡¼­ regexp¸¦ °Ë»öÇÑ´Ù. Á¤±Ô Ç¥Çö½ÄÀÇ ¹®¹ýÀº GNU Emacs¿¡¼­¿Í µ¿ÀÏÇÏ´Ù. See section `Syntax of Regular Expressions' in The GNU Emacs Manual.

replacement°¡ »ý·«µÈ´Ù¸é, regexp´Â ¹®ÀÚ¿­¿¡¼­ regexp¿Í ù ¹ø°·Î ÀÏÄ¡ÇÏ´Â À妽º·Î È®ÀåµÈ´Ù. ¹®ÀÚ¿­ÀÇ ¾îµð¿¡¼­µµ ÀÏÄ¡ÇÏ´Â regexp¸¦ ãÁö ¸øÇß´Ù¸é `-1'·Î È®ÀåµÈ´Ù.

regexp(`GNUs not Unix', `\<[a-z]\w+')
=>5
regexp(`GNUs not Unix', `\<Q\w*')
=>-1

replacement°¡ ÁÖ¾îÁö¸é, regexp´Â ÀÌ ÀÎÀÚÀÇ È®Àå ¹®ÀÚ¿­·Î ¹Ù²î´Âµ¥, `\n'´Â (regexpÀÇ n ¹ø° °ýÈ£ ÃÄÁø ºÎÇ¥Çö(sub-expression))¿¡ ÀÇÇØ ÀÏÄ¡µÈ ÅؽºÆ®·Î ±³Ã¼µÇ°í, `\&'´Â Àüü Á¤±Ô Ç¥Çö½Ä¿¡ ÀÏÄ¡µÈ ÅؽºÆ®·Î µÇµµ·Ï ÇÑ´Ù. (¿ªÀÚÁÖ: ¿ø¹®ÀÌ ³Ê¹« º¹ÀâÇؼ­ Àß ¹ø¿ªµÈ °ÍÀÎÁö ¸ð¸£°Ú½À´Ï´Ù. ¹ø¿ª¿¡ ºÒ¸¸ÀÌ ÀÖÀ¸½Å ºÐµéÀº ´ÙÀ½ÀÇ ¿ø¹®À» Âü°íÇÏ½Ã°í ¿ªÀÚ¿¡°Ô ´õ ÁÁÀº ¹ø¿ª ÀÇ°ß(¶Ç´Â Á» ´õ ±Ø´ÜÀûÀ¸·Î´Â, ¿ø¹® ¼öÁ¤ ÀÇ°ß)À» ÁÖ½Ã¸é °¨»çÇÏ°Ú½À´Ï´Ù.

À§ ¹ø¿ª¿¡ ´ëÇÑ ¿ø¹®:

If replacement is supplied, regexp changes the expansion to this argument, with `\n' substituted by the text matched by the nth parenthesized sub-expression of regexp, `\&' being the text the entire regular expression matched.)

regexp(`GNUs not Unix', `\w\(\w+\)$', `*** \& *** \1 ***')
=>*** Unix *** nix ***

³»Àå ¸ÅÅ©·Î regexp´Â ´ÜÁö ÀÎÀÚ°¡ ÀÖÀ» ¶§¿¡¸¸ ÀνĵȴÙ.

¹®ÀÚ¿­¿¡¼­ ºÎºÐ-¹®ÀÚ¿­À» »Ì±â

¹®ÀÚ¿­ Áß¿¡¼­ ºÎºÐ-¹®ÀÚ¿­Àº substr·Î »Ì¾Æ³¾ ¼ö ÀÖ´Ù.

substr(string, from, opt length)

ÀÌ°ÍÀº stringÀÇ ºÎºÐ-¹®ÀÚ¿­·Î È®ÀåµÈ´Ù. ±× ºÎºÐ-¹®ÀÚ¿­Àº stringÀÇ À妽º from °ªºÎÅÍ ½ÃÀÛÇÏ¿© length ±ÛÀÚ ¼ö ¸¸Å­ÀÇ ±æÀÌÀ̸ç, ¶Ç´Â length°¡ »ý·«µÇ¾ú´Ù¸é stringÀÇ ³¡±îÁö·Î µÈ´Ù. ¹®ÀÚ¿­¿¡¼­ óÀ½ÀÇ À妽º °ªÀº Ç×»ó 0ÀÌ´Ù.

substr(`gnus, gnats, and armadillos', 6)
=>gnats, and armadillos
substr(`gnus, gnats, and armadillos', 6, 5)
=>gnats

³»Àå ¸ÅÅ©·Î substrÀº ÀÎÀÚ°¡ ÀÖÀ» ¶§¿¡¸¸ ÀνĵȴÙ.

¹®ÀÚ¸¦ º¯È¯Çϱâ

¹®ÀÚ¸¦ º¯È¯ÇÏ·Á¸é translitÀ» »ç¿ëÇÑ´Ù.

translit(string, chars, replacement)

ÀÌ°ÍÀº stringÀ¸·Î È®ÀåµÇ´Âµ¥, ±× ¹®ÀÚµé Áß¿¡¼­ chars¿¡µµ ³ªÅ¸³ª´Â ¹®ÀÚ´Â ±× ¹®ÀÚÀÇ char¿¡¼­ÀÇ À§Ä¡¿Í °°Àº À妽º(À§Ä¡)¿¡ ÀÖ´Â replacementÀÇ ¹®ÀÚ·Î ±³Ã¼µÈ´Ù.

¸¸ÀÏ replacement°¡ charsº¸´Ù ª´Ù¸é, ³²¾Æµµ´Â ¹®ÀÚ´Â È®Àå¿¡¼­ ¾ø¾îÁø´Ù. replacement°¡ »ý·«µÇ¾ú´Ù¸é, chars¿¡ ³ªÅ¸³ª´Â ¸ðµç ¹®ÀÚµéÀº stringÀÇ È®Àå¿¡¼­ Á¦°ÅµÈ´Ù.

chars¿Í replacement µÑ ´Ù ¹®ÀÚ-¹üÀ§¸¦ Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é, `a-z'(¸ðµç ¼Ò¹®ÀÚ¸¦ ¶æÇÔ), `0-9'(¸ðµç ¼ýÀÚ¸¦ ¶æÇÔ) µîÀÌ´Ù. ÁÙ¹®ÀÚ(`-')¸¦ ÇϳªÀÇ ÀÏ¹Ý ¹®Àڷμ­ chars³ª replacement¿¡ Æ÷ÇÔ½ÃÅ°·Á¸é ±× ¹®ÀÚ¿­ÀÇ Ã³À½À̳ª ¸¶Áö¸·¿¡ À§Ä¡½ÃÄÑ¾ß ÇÑ´Ù.

¹®ÀÚÀÇ ¹üÀ§¿¡¼­ ±× °ªÀÌ Ã³À½º¸´Ù ¸¶Áö¸·ÀÌ ´õ `ÀÛÀº' °ÍÀº ¿¡·¯°¡ ¾Æ´Ï´Ù. (¿ªÀÚÁÖ: ¿ø¹®¿¡´Â `ÀÛÀº'ÀÌ ¾Æ´Ñ `Å«'À¸·Î µÇ¾î Àִµ¥, ¹®¸Æ »ó ¸í¹éÇÑ ¿À·ù·Î º¸ÀÓ) ÀÌ °æ¿ì¿¡ ±× ¹üÀ§´Â °Å²Ù·Î µÉ °ÍÀÌ´Ù. ´Ù½Ã ¸»ÇØ, `9-0'Àº `9876543210'À» ÀǹÌÇÑ´Ù.

translit(`GNUs not Unix', `A-Z')
=>s not nix
translit(`GNUs not Unix', `a-z', `A-Z')
=>GNUS NOT UNIX
translit(`GNUs not Unix', `A-Z', `z-a')
=>tmfs not fnix

ù¹ø° ¿¹´Â ¸ðµç ´ë¹®ÀÚ¸¦ »èÁ¦ÇÏ´Â °ÍÀÌ°í, µÎ ¹ø° º¯È¯Àº ¼Ò¹®ÀÚ¸¦ ´ë¹®ÀÚ·Î ¹Ù²Ù´Â °ÍÀ̸ç, ¼¼ ¹ø°´Â ¸ðµç ´ë¹®ÀÚÀÇ (¾ËÆĺª ¼ø¼­¸¦) `µÚÁýÀº' ¼Ò¹®ÀÚ·Î º¯È¯ÇÑ °ÍÀÌ´Ù. óÀ½ µÎ °³ÀÇ °æ¿ì´Â ¸Å¿ì ÈçÈ÷ ¾²ÀδÙ.

³»Àå ¸ÅÅ©·Î translitÀº ÀÎÀÚ°¡ ÀÖÀ» °æ¿ì¿¡¸¸ ÀνĵȴÙ.

Á¤±ÔÇ¥Çö½Ä¿¡ ÀÇÇØ ÅؽºÆ®¸¦ ġȯÇϱâ

ÇÑ ¹®ÀÚ¿­¿¡¼­ÀÇ Æ÷°ýÀûÀΠġȯÀº patsubst¸¦ »ç¿ëÇÑ´Ù.

patsubst(string, regexp, opt replacement)

ÀÌ°ÍÀº string¿¡¼­ regexp¿Í ÀÏÄ¡ÇÏ´Â ºÎºÐÀ» ã°í, ÀÏÄ¡ÇÏ´Â ºÎºÐ °¢°¢À» replacement·Î ġȯÇÑ´Ù. Á¤±Ô Ç¥Çö½ÄÀÇ ¹®¹ýÀº GNU Emacs¿Í °°´Ù.

string¿¡¼­ regexp¿Í ÀÏÄ¡ÇÏÁö ¾Ê´Â ºÎºÐÀº È®Àå ¹®ÀÚ¿­·Î ±×´ë·Î º¹»çµÈ´Ù. ÀÏÄ¡ÇÏ´Â °ÍÀÌ ¹ß°ßµÈ ÈÄ¿¡´Â ¾ðÁ¦³ª, ´ÙÀ½ °Ë»öÀº ±× ÀÏÄ¡Çß´ø ºÎºÐÀÇ ´ÙÀ½ºÎÅÍ ÁøÇàµÈ´Ù. µû¶ó¼­ string¿¡¼­ °¢°¢ÀÇ ¹®ÀÚ´Â Àý´ë·Î µÎ ¹ø ´ëÄ¡µÇÁö ¾Ê´Â´Ù. regexp°¡ ±æÀÌ°¡ 0ÀÎ ¹®ÀÚ¿­°ú ÀÏÄ¡ÇÑ´Ù¸é, ¹«ÇÑ ·çÇÁ°¡ µÇ¾î ¹ö¸®´Â °ÍÀ» ¸·±â À§ÇØ ´ÙÀ½ °Ë»ö ½ÃÀÛ À§Ä¡´Â Çϳª Áõ°¡µÈ´Ù. (¿ªÀÚÁÖ: ÀÌ·± ±â´ÉÀº ¹®Á¦°¡ µÉ ¼ÒÁö°¡ ÀÖ´Ù. ¹«ÇÑ ·çÇÁ¸¦ ¸·±â À§Çؼ­¶ó¸é, ±æÀÌ°¡ 0ÀÎ ¹®ÀÚ¿­°úÀÇ ÀÏÄ¡´Â ¾Æ¿¹ ¹«½ÃÇØ ¹ö¸®´Â °ÍÀÌ ´õ ³ªÀ» °Í °°Àºµ¥.. ±×·± ÀÏÄ¡¸¦ ó¸®ÇØ ÁÖ´Â °ÍÀÌ Á¤¸» ÇÊ¿äÇÑ °ÍÀϱî?)

ġȯÀÌ ÀϾ°Ô µÉ ¶§¿¡´Â, replacement°¡ È®Àå °á°ú¿¡ »ðÀԵǴµ¥, `\n'´Â (regexpÀÇ n ¹ø° °ýÈ£ ÃÄÁø ºÎÇ¥Çö(sub-expression))¿¡ ÀÇÇØ ÀÏÄ¡µÈ ÅؽºÆ®·Î ±³Ã¼µÇ°í, `\&'´Â Àüü Á¤±Ô Ç¥Çö½Ä¿¡ ÀÏÄ¡ÇÑ ÅؽºÆ®·Î µÇµµ·Ï ÇÑ´Ù.

replacement ÀÎÀÚ´Â »ý·«µÉ ¼ö Àִµ¥, ±×·¸°Ô Çϸé regexp¿¡ ÀÏÄ¡ÇÏ´Â ÅؽºÆ®´Â »èÁ¦µÈ´Ù.

patsubst(`GNUs not Unix', `^', `OBS: ')
=>OBS: GNUs not Unix
patsubst(`GNUs not Unix', `\<', `OBS: ')
=>OBS: GNUs OBS: not OBS: Unix
patsubst(`GNUs not Unix', `\w*', `(\&)')
=>(GNUs)() (not)() (Unix)
patsubst(`GNUs not Unix', `\w+', `(\&)')
=>(GNUs) (not) (Unix)
patsubst(`GNUs not Unix', `[A-Z][a-z]+')
=>GN not 

Á» ´õ ½ÇÁ¦ÀûÀÎ ¿¹¸¦ µé¾îº¸ÀÚ. ÀÌ°ÍÀº °³º°ÀûÀÎ ´Ü¾î ¶Ç´Â Àüü ¹®ÀåÀ» (¿µ¹®¿¡¼­) ´ë¼Ò¹®ÀÚ ±³Ã¼ÇÏ´Â °ÍÀε¥, upcase¿Í downcase ¸ÅÅ©·Î¿¡ ´ëÇÑ È£ÃâÀ» ±³Ã¼ÇÏ¿© ¹®ÀÚ¿­·Î ¸¸µç´Ù.

define(`upcase', `translit(`$*', `a-z', `A-Z')')dnl
define(`downcase', `translit(`$*', `A-Z', `a-z')')dnl
define(`capitalize1',
     `regexp(`$1', `^\(\w\)\(\w*\)', `upcase(`\1')`'downcase(`\2')')')dnl
define(`capitalize',
     `patsubst(`$1', `\w+', `capitalize1(`\&')')')dnl
capitalize(`GNUs not Unix')
=>Gnus Not Unix

³»Àå ¸ÅÅ©·Î patsubst´Â ÀÎÀÚ°¡ ÀÖÀ» ¶§¿¡¸¸ ÀνĵȴÙ.

Çü½ÄÈ­µÈ Ãâ·Â

Çü½ÄÈ­µÈ Ãâ·ÂÀº formatÀ¸·Î ¸¸µé ¼ö ÀÖ´Ù.

format(format-string, ...)

ÀÌ°ÍÀº C ÇÔ¼öÀÎ printf¿Í ¾ÆÁÖ ºñ½ÁÇÏ°Ô ÀÛµ¿ÇÑ´Ù. óÀ½ ÀÎÀÚ´Â Çü½Ä ÁöÁ¤ ¹®ÀÚ¿­(format string)ÀÌ°í, ¿©±â¿¡´Â `%' ÁöÁ¤¹®ÀÚ(specification)°¡ Æ÷Ç﵃ ¼ö ÀÖ´Ù. formatÀº Çü½ÄÈ­µÈ ¹®ÀÚ¿­·Î È®ÀåµÈ´Ù.

±× »ç¿ë¹ýÀ» ¼³¸íÇÏ´Â °¡Àå ÁÁÀº ¹æ¹ýÀº ¸î °³ÀÇ ¿¹¸¦ µå´Â °ÍÀÌ´Ù.

define(`foo', `The brown fox jumped over the lazy dog')
=>
format(`The string "%s" is %d characters long', foo, len(foo))
=>The string "The brown fox jumped over the lazy dog" is 38 characters long

forloop ¸ÅÅ©·ÎÀÇ Á¤ÀÇ¿Í »ç¿ë¹ýÀº See section ·çÇÁ¿Í Àç±Í. ÀÌ ¿¹´Â formatÀ¸·Î Ç¥ Çü½ÄÀÇ Ãâ·ÂÀ» ¸¸µé¾î ³»´Â ¹æ¹ýÀ» º¸¿©ÁØ´Ù.

forloop(`i', 1, 10, `format(`%6d squared is %10d
', i, eval(i**2))')
=>     1 squared is	    1
=>     2 squared is	    4
=>     3 squared is	    9
=>     4 squared is	   16
=>     5 squared is	   25
=>     6 squared is	   36
=>     7 squared is	   49
=>     8 squared is	   64
=>     9 squared is	   81
=>    10 squared is	  100

format ³»Àå ¸ÅÅ©·Î´Â ANSI C `printf' ÇÔ¼ö¸¦ º» µû¼­ °í¾ÈµÇ¾ú°í, Ç¥ÁØÀûÀÎ `%' ÁöÁ¤ÀÚ¿Í ±×¿¡ µþ¸° `c', `s', `d', `o', `x', `X', `u', `e', `E', `f'¸¦ Áö¿øÇÑ´Ù. ÀÌ°ÍÀº ¶ÇÇÑ ÀÚ¸® Æø°ú Á¤¹Ðµµ, ±×¸®°í `+', `-', ` ', `0', `#', `h', `l'°ú °°Àº º¯°æÀÚ¸¦ Á¦°øÇÑ´Ù. `printf'ÀÇ ±â´ÉÀ» ´õ ÀÚ¼¼È÷ ¾Ë°í ½ÍÀ¸¸é, C ¶óÀ̺귯¸® ¸Å´º¾óÀ» º¸½Ã¿À.


Go to the first, previous, next, last section, table of contents.