Macros for text handling
기본적으로 매크로에 ()
가 없으면 매크로로 인식되지 않습니다.
len
$ m4 <<\@
len(`abcdef')
len((a, b))
len()
@
6
6
0
substr
substr ( String, From, [ Length ] )
$ m4 <<\@
substr(`hello', 0, 3)
substr(`hello', 1, 3)
substr(`hello', 2)
@
hel
ell
llo
$ m4 <<\@
define(`eng',`engineering')
substr(`engineer',0,3)
@
engineering
index
index ( String, Substring )
$ m4 <<\@
index(`hello',`hel')
index(`hello',`ell')
index(`hello',`llo')
index(`not in string', `xyz')
@
0
1
2
-1 # 매칭이 없으면 -1
translit
translit ( String, Set1, Set2 )
translit ( String, Set1 )
$ m4 <<\@
translit(`little', aeiou, 12345)
translit(`little', aeiou) # Set2 가 없으면 Set1 에 매칭되는 문자가 삭제된다.
@
l3ttl2
lttl
$ m4 <<\@
define(`ALPHA', `abcdefghijklmnopqrstuvwxyz')
define(`ALPHA_UPPER', `ABCDEFGHIJKLMNOPQRSTUVWXYZ')
translit(`abc ebg13', ALPHA, ALPHA_UPPER)
@
ABC EBG13
----------------------------------------
$ m4 <<\@
define(`ALPHA', `abcdefghijklmnopqrstuvwxyz')
define(`ROT13', `nopqrstuvwxyzabcdefghijklm')
translit(`abc ebg13', ALPHA, ROT13)
@
nop rot13
$ m4 <<\@
define(`ALPHA', `abcdefghijklmnopqrstuvwxyz')
define(`ROT13', `nopqrstuvwxyzabcdefghijklm')
define(`eng',`engineering')
translit(`rat', ALPHA, ROT13)
@
engineering
regexp
regexp ( String, Regexp, [ Replacement ] )
M4 에서 regexp 은 emacs 에디터에서 사용하는 regexp 를 사용합니다.
이것은 basic regular expressions 과 비슷한데 좀 다릅니다.
가령 +
, ?
문자는 escape 해서 사용하지 않습니다.
자세한 내용은 여기 를 참조하세요.
( extended regular expressions 은 m4 2.0 버전에서 제공될 거라고 합니다 )
regexp 는 Replacement
가 없으면 매칭되는 부분의 index 가 반환됩니다.
$ m4 <<\@
regexp(`hello', `l+')
regexp(`hello', `')
@
2
0
back-reference 에 의해 치환될 때 hidden 부분은 포함되지 않습니다.
$ m4 <<\@
regexp(`hello', `\(l+\).*$', `\&')
regexp(`hello', `\(l+\).*$', `\1')
regexp(`hello', `', `foo')
@
llo # hidden 부분 ( 여기서는 he ) 는 포함되지 않는다.
ll
foo
patsubst
patsubst ( String, Regexp, [ Replacement ] )
patsubst 는 Replacement
가 없으면 매칭되는 부분이 삭제됩니다.
$ m4 <<\@
patsubst(`hello', `l+')
patsubst(`hello', `l+.*$')
@
heo
he
$ m4 <<\@
patsubst(`hello', `^', `X')
patsubst(`hello', `^\|$', `XX')
patsubst(`hello', `l+', `XXX')
@
Xhello
XXhelloXX
heXXXo
format
format ( format-string, . . . )
C 언어의 printf
함수와 같이 동작하는 매크로입니다.
다른 매크로와 동일하게 출력 결과에 대해서도 확장이 발생합니다.
좀 더 자세한 내용은 여기 를 참조하세요
$ m4 <<\@
define(`foo', `The brown fox jumped over the lazy dog')
format(`The string "%s" uses %d characters', foo, len(foo))
@
The string "The brown fox jumped over the lazy dog" uses 38 characters
--------------------------------------------------------
$ m4 <<\@
define(`concat', ``$*'')
define(`fsent', `format(`%-25s %-16s nfs %-16s 0 0', `$1:$2', `$3', concat$4)')
fsent(freja, /home/gevn, /home/gevn, (rw, soft, bg, grpid))
fsent(freja, /home/freja, /home/freja, (rw, soft, grpid))
fsent(rimfaxe, /home/rimfaxe, /home/rimfaxe, (rw, soft, bg))
@
freja:/home/gevn /home/gevn nfs rw,soft,bg,grpid 0 0
freja:/home/freja /home/freja nfs rw,soft,grpid 0 0
rimfaxe:/home/rimfaxe /home/rimfaxe nfs rw,soft,bg 0 0