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.