Home Map Index Search News Archives Links About LF
[Top Bar]
[Bottom Bar]
[Photo of the Author]
Guido Socher
�۾��� �Ұ�: �״� �������� ���� �ý����̰�, �������� ������ ����ڿ� �Բ� ���� �� �� �ִٴ� ���� �ſ� ��ſ� ���̱� ������ �������� ����Ѵ�. ���� �ð��� ���� ģ���� �Բ� �����ų�, BBC�� ���� ���� ���񽺸� ��ų�, �����ŷ� ���ܸ� ���ƴٴϰų� �������� ������ ����.

���ڿ��� ���� ������


����:
���� ��
������ ����
���� ��Ģ
Text�� �����ϸ鼭 ���� ǥ���� ����

���� ǥ����

[Illustration]

��� ���� ����: ���� ǥ������ ���� �ΰ�(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�� �� ���� ������ �ؽ�Ʈ���� �󸶳� ���� �ݺ��Ǵ����� �����Ѵ�.

descriptiongrepegrepperlvivimvileelvisemacs
0�� �̻�********
1�� �̻�\{1,\}++  \+\+\++
0�� Ȥ�� 1��\???  \=\?\=?
n���� m ��\{n,m\}  {n,m}      \{n,m\}\{n,m\}

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�� ������ �Ἥ �̿�ȴ�.

���α׷� �̸�parentheses syntax���� ����
grep\(\)\1
egrep()\1
perl()\1 or ${1}
vi,vim,vile,elvis\(\)\1
emacs\(\)\1

��:

 ��  [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

���ο� ����Ʈ�� ������ ���� ���̴�. Phone Name ID ... 3412 Bob 123 3834 Jonny 333 12248 Kate 634 14223 Tony 567 2567 Peter 435 3567 Alice 535 15248 Kerry 534 ...

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
      ...

������ ���� �ϸ� �ȴ�. vi: s/^ *// (There is 2 spaces as we do not have a +) emacs: '^ +' replaced by the empty string perl: perl -pe 's/^ +//' phonelist.txt

�ҽ� �ڵ带 �ۼ��ϸ鼭 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