Guido Socher �۾��� �Ұ�: �״� �������� ���� �ý����̰�, �������� ������ ����ڿ� �Բ� ���� �� �� �ִٴ� ���� �ſ� ��ſ� ���̱� ������ �������� ����Ѵ�. ���� �ð��� ���� ģ���� �Բ� �����ų�, BBC�� ���� ���� ���� ��ų�, �����ŷ� ���ܸ� ���ƴٴϰų� �������� ������ ����. ����: ���� �� ������ ���� ���� ��Ģ Text�� �����ϸ鼭 ���� ǥ���� ���� |
���� ǥ������� ���� ����: ���� ǥ������ ���� �ΰ�(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�� �� ���� ������ �ؽ�Ʈ����
�� ���� �ݺ��Ǵ����� �����Ѵ�.
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�� ������
�Ἥ �̿�ȴ�.
��: �� [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 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 ... �ҽ� �ڵ带 �ۼ��ϸ鼭 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 |