���W�B�⦡
���e�K�n�G
���W�B�⦡ (regular expression) �Q���Ω�j�M�A �Τ�y�ק諸�i�����X�W�C
�z�i�H�b�\�h�i�����s�边�B �y�k���R�{���B �H�ε{���y�����A �o�{�L�̪��ܼv�C
����
�\�h�i�����s�边�A ���O vi �M emacs�A �u��{�� grep/egrep�A �H�ε{���y��
�A ���O awk�B perl �M sed�A ���i�H�o�{���W�B�⦡���ܼv�C
���W���ܦ��Q���Ω�j�M�A �Τ�y�ק諸�i�����X�W�C
���W�B�⦡�N�O�Y�ؼ˦�����y�z�A �z�L�Ӽ˦��A �i�H����峹�����@�q��r�C
�O�o�h�~�H�e�A �ݨ�Y�H�b�ϥΥ��W�B�⦡�A �ڷ��ɤj�P���_�C
�q�`�n��O�Ƥp�ɪ��ɶ��A �~�৹���峹�s��H�ηj�M���u�@�A
�~�M�i�H�b�X�����N�����ѨM�C ���O�A ���ڪ`���ù����B�⦡�ɡA
�o�s�@�Ӧr�]�ݤ����A ���̬ݰ_�ӹ��O�@���I�B �u�B �P���A
�H�Ψ�L�r���A �Ҵ�_�Ӫ��_�DzզX�C ���M�p���A �ڤ��¤U�w�M�ߡA
�n�h��ѥ����u�@��z�A �ܧ֦a�A �ڵo�{���̨��O�D�`�e���ϥΪ��A
���@�ǰ��W�h�i�`�C
���M���W�B�⦡�b Unix ���@�ɤ��A �B�Φa�۷��s�x�A ���O�٥��X�{�L�A
�ҿת��u�зǥ��W�B�⦡�v�A �������p�A �ܹ��O���\�h���P���訥�s�b�@��C
�Ҧp���G�� grep �{���G grep �P egrep�A ���̳����ϥΥ��W�B�⦡�A
�u�O��O�y�L���P�Ӥw�C �ӵ{���y�� Perl �����W�B�⦡�A �\��i���O�̧��㪺�F�C
�i�ߪ��O�A �L�̳����`�ۦP����h�A �@���z��Ѱ��[����A
�A�h�Dzߨ�L�訥���ӷL�t���B�A �O�ܮe�����C
����N���U�줶�Ф@�ǰ��[���A �P�ɱz�]�i�H�d�ݤ��P�{�����ާ@�������A
�H�K��Ѩ�۲����B�A �H�Υ\��Ҧb�C
�@��²�檺�Ҥl
Ĵ�p���A �z���@�����q���u���q�ܦW��A ���ݰ_�ӹ��O�o�ˡG
Phone Name ID
...
...
3412 Bob 123
3834 Jonny 333
1248 Kate 634
1423 Tony 567
2567 Peter 435
3567 Alice 535
1548 Kerry 534
...
�o�O�@�� 500 �H�����q�A �L�̧���u��ƥH�@�몺�¤�r�ɮץ[�H�x�s�C
�q�ܸ��X���A �Ĥ@��Ʀr�� 1 ���H�A ���ܥL�b 1 ���j�H�u�@�C
����쩳�֦b 1 ���j�H�u�@�O?
���W�B�⦡�i�H�^���o�Ӱ��D�G
grep '^1' phonelist.txt
��
egrep '^1' phonelist.txt
��
perl -ne 'print if (/^1/)' phonelist.txt
�����N��O���A �j�M�ɮת��C�@��A �ݬݬO�_���H 1 �@�Ӧ�}�Y���C
�Ÿ� "^" ���ܭn���C�@�檺�}�Y�A ���j���ӥ��W�B�⦡�A
�u���ǰt��A �H 1 �@�Ĥ@�Ӧr�����C�@��C
�y�k�W�h
��@�r���˦�
���W�B�⦡���c��A �N�O��@�r���˦��A ���u���ǰt�o�Ӧr���C
�e�����Ҥl���A 1 �N�O�ӳ�@�r���˦��A �o�u���ǰt�峹���A 1 �o�Ӧr���C
�t�@�ӳ�@�r���˦�����ҬO�G
egrep 'Kerry' phonelist.txt
�o�Ӥ��˦��A ����٬O�ȥѳ�@�r���˦��Ҳզ� (�r�� K,e ...)
�ƭӦr���i�H�E���_�ӡA ��b�r�����X���A �o�˪����X�A
�O�Ѥ@�索�B �k��A���A �H�Φb�o���A���������@��r���A �Ӱ������ܡC
��Ӧr�����X�A ���]�Q������@�r���˦��A �b�i��˦����ɡA
�o�Ǧr�����X�̡A �|���@�ӡA �ӥB�u���@�Ӧr���A �X�{�b�ҷj�M�ǰt����y���C
�Ҧp�G
[abc] �O�ӳ�@�r���˦��A �ΨӤ��ǰt�峹��
a�B b �� c ���������@�Ӧr��
[ab0-9] �O�ӳ�@�r���˦��A �ΨӤ��ǰt�峹��
a �� b �Τ@�� ascii �r�������A
�d��b 0 �� 9 ���Ʀr
[a-zA-Z0-9\-] �ΨӤ��ǰt�Y�ӳ�@�r����
�j�g�Τp�g�r���B ���ԧB�Ʀr�δ
���ڭ̸յ۰���G
egrep '^1[348]' phonelist.txt
�o�˷|�j�M��H 13 �� 14 �� 18 �}�Y���C�@��C
�p�ڭ̩Ҭݨ쪺�A �j������ ASCII �r���A �N�O���Ө�r���쥻���ˤl�Ӥ��A
���O���� ASCII �r���A �o���S�����t�N�C �Ҧp��A���A
���ܶ}�l���w�@�Ӧr�����X�A �b�r�����X���A "-"
���S���t�N�N�O�u�d��v�C �n�����S�w�r�����S���t�N�A �z�i�H�b�Ӧr���e���A
�[�W�ϱu�r���C �b [a-zA-Z0-9\-] ������A �N�O�@�ӹ�ҡC
�]���Y�ǥ��W�B�⦡���u�訥�v�A �b�S�w�r���e���[�W�ϱu�r����A
�|���S���t�N�A ���ɡA �A�o�N�e�����ϱu�r�������A �~���쥻���`���N��C
�I�r�� (.) �O�@�ӭ��n���S���r���A ���F����r���~�A
���|���ǰt�����@�Ӧr���C �Ҧp�G
grep '^.2' phonelist.txt
��
egrep '^.2' phonelist.txt
�o�˷|�j�M�ǰt��A �Ĥ@�Ӧr��������r���A �ӥB�ĤG�Ӧr���� 2 ���C�@��C
�p�G�ϥ� "[^" �Ӥ��O "[" �өw�q�r�����X�A
�h��ҥN�����t�N�A �P��ӧ����ۤϡC �b "[" �P "^"
�զX����A "^" ���N�q���A�O�N���C�檺�}�Y�A
�ӬO�N���r�����X���ϸq�C
[0-9] �O�ӳ�@�r���˦��A �|���ǰt��峹��
�@�� ascii �r�������A �d��b 0 �� 9 ���Ʀr
[^0-9] �|���ǰt�����@�ӫD���ԧB�Ʀr���r��
[^abc] �|���ǰt�����@�ӫD a�B b �� c ���r��
. �I�r���|���ǰt�����@�ӫD����r�����r��
�����N�q�P [^\n] �ۦP�A �䤤 \n �O����r��
�n���ǰt��u���O�H 1 �}�Y���C�@���r�v�A �ڭ̥i�H�o�˼g�G
grep '^[^1]' phonelist.txt
��
egrep '^[^1]' phonelist.txt
�w��r��
�b�e���������A �ڭ̤w�g���D "^" �O�ΨӤ��ǰt��峹���C�@��}�Y�C
�w��r���O�@�دS�O�����W�B�⦡�r���A ���Q�ΨӤ��ǰt��峹���Y�Ӧ�m�A
�Ӥ��O�峹���Ҧ��r���C
^ �|���ǰt�峹�̪��C�@��}�Y
$ �|���ǰt�峹�̪��C�@�浲��
�Q�n�b���q�����u�q�ܦW�椤�A �M�� ID �s���� 567 ���H�A �ڭ̥i�H�o�˰��G
egrep '567$' phonelist.txt
�o�ˤl�|�M���u�H�Ʀr 567 �����v���C�@��C
���Ʀr��
���Ʀr���ΨӨM�w�A ��@�r���˦��b�峹�������X�{�X���C
���� |
grep |
egrep |
perl |
vi |
vim |
vile |
elvis |
emacs |
�s�Φh�� |
* |
* |
* |
* |
* |
* |
* |
* |
�@�Φh�� |
\{1,\} |
+ |
+ |
|
\+ |
\+ |
\+ |
+ |
�s�Τ@�� |
\? |
? |
? |
|
\= |
\? |
\= |
? |
n �� m �� |
\{n,m\} |
|
{n,m} |
|
|
|
\{n,m\} |
\{n,m\} |
�`�N�ƶ��G �U�� VI �s��{���n�P�W�����ʧ@�@�P�� magic �]�w�ﶵ�i��.
�|�@�ӹq�ܦW�檺�Ҥl:
....
1248 Kate 634
....
1548 Kerry 534
....
�n���ǰt�H 1 �}�Y, ���ۦ��@�Ǫ��ԧB�Ʀr, �M��
�ܤ֦��@�ӥH�W�����j�r���H�ΤH�W�O�H K �}�l���C�@��
�ڭ̥i�H�o�˼g:
grep '^1[0-9]\{1,\} \{1,\}K' phonelist.txt
�Ψϥ� * �ӭ��Ƥ��ǰt [0-9] �P���j�r��:
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
���Ʀr���|�N�e������@�r���˦��X�{�����ƥ[��.
�ҥH "23*4" �����ܻ��o�|���ǰt " 2 �M�� 3 ����r�� 4"
(�o���O "23.*4" ���t�q). �o�|���ǰt " 2 �@�� �M�� 3
�i��\�h���H�� 4 �@��"
�٦��@�ӧA�]���n�`�N�����I�N�O�o�ǭ��Ʀr���ܳg��.
�]�N�O���b���˦����Ĥ@�ӥX�{�����Ʀr���|�ɥi��a�V
�C���r���k�䩵���ҭn�ǰt���r��.
�B�⦡ ^1.*4
�N�|���ǰt��@���
1548 Kerry 534
�q�}�Y�@����̫᭱�� 4.
���O�o�N�O���|�u�ǰt�� 154.
�o�ӯS�ʹ� grep �u��{���èS������v�T���O���r���s��P�N��
�o�D�`���n.
�A���r����
�O�Я�O
�A���r�����O�Я�O������èS�����ܹB�⦡������k���O
�o�o����N�]�t�b�A�����˦��Ҥǰt�쪺��r�����O�а_��,�ҥH
�b�B�⦡���᭱�i�H�A�ѦҨ�o.
�o�ӳQ�O�Ъ����e�i�H�g���ܼƨӨ��o. �Ĥ@�լA���r���ҰO�Ъ����e
�i�H�g���ܼƤ@�Ө��o, �ĤG�լA���r���ҰO�Ъ����e�i�H�g���ܼƤG�Ө��o
�̦�����.
�{���W�� | �A���r���y�k | �ܼƻy�k |
grep | \(\) | \1 |
egrep | () | \1 |
perl | () | \1 or ${1} |
vi,vim,vile,elvis | \(\) | \1 |
emacs | \(\) | \1 |
�Ҧp:
�B�⦡ [a-z][a-z] �N�|
���ǰt�G�Ӥp�g�r��.
�{�b�ڭ̥i�H�ϥ��ܼƨӷj�M��ﹳ�O 'otto' �o������r:
egrep '([a-z])([a-z])\2\1'
�ܼ� \1 �����e�O�r�� o
���ܼ� \2 �����e�O�r�� t.
�o�ӹB�⦡�]������ǰt�� anna �o�ӦW�r
���O yxyx �N���i�H�F.
�b�M�乳�O otto �M anna �o���W�r�ɨä��`�Ψ�A���r�����O�Я�O
�ˬO��r���s��P�N���ɷ|�`�Ψ�o���O�Я�O.
���Υ��W�B�⦡����O�ӽs���r
�Q�b�s���r�ɭɥΥ��W�B�⦡����O�A�ݭn�@�ӹ��O vi, emacs �������s�边
�Ϊ̧A�]�i�H�ϥι��O perl �������{���y��.
�b emacs �s�边���A�i�H�ϥ� M-x �ӤU query-replace-regexp �R�O
�άO�N query-replace-regexp �R�O�]�w�b�@�ǥ\����W. ��άO�A�]�i�H
�ϥ� replace-regexp �R�O. ���L query-replace-regexp �O�ĥ�ͪ��覡,
�ӫ�̫h�_.
�b vi �s�边����r���N���h�O�ϥ� :%s/ / /gc �o�˪��R�O. �䤤
�ʤ���r���O���j�M '����ɮ�' ���d��M�ӧA�]�i�H���N���A�Q�n��
�d��. �b vim �s�边���A�i�H���U shift-v ��ӼХܤ@�Ӱϰ�M��A
�i�H�u�b�Хܪ��ϰ�W�ϥΥN����r���R�O. �b�o�̧ڨä��� vim ��
�ϥΦh�@�����A�i�H�ѦҸӽs�边�Ҫ����۲߫��ɤ��. �ӥN���R�O��
�� 'gc' �O���ĥΥ�ͪ��覡. ���ϥΥ�ͪ��覡�i�H�U s/ / /g �o��
���R�O.
�ҿץ�ͪ��覡�O���b�C�����ǰt��ɽs�边�|���ܸ߰ݧA
�O�_�n����N����r���ʧ@.
�b perl �{���y�����A�i�H�ϥ�
perl -pe 's/ / /g'
���ڭ̬ݤ@�I�Ҥl. �Ҧp�{�b�ڭ̤��q���s���p���w�g���F����
�N�O�Z�q�ܸ��X�O 1 �}�Y���H�b�ĤG����ԧB�Ʀr���᳣�|���J�@
�� 2 .
�]�N�O���p�G����q�ܸ��X�O 1423 �h�����ܦ� 14223.
�ª��W��:
Phone Name ID
...
3412 Bob 123
3834 Jonny 333
1248 Kate 634
1423 Tony 567
2567 Peter 435
3567 Alice 535
1548 Kerry 534
...
�o�̬O�U�سB�z����k:
vi: s/^\(1.\)/\12/g
emacs: ^\(1.\) replaced by \12
perl: perl -pe 's/^(1.)/${1}2/g' phonelist.txt
�{�b�s���q�ܦW��ݰ_�ӹ��O�o��:
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 �{���y���i�H�B�z�W�L \1 �� \9 ���O���ܼƦ]�� \12 �N�|����
�� 12 �ӰO���ܼƦ��ɳo���ܼƪ����e���M�O�Ū�. �n�ѨM�o�Ӱ��D�ڭ�
�i�H�ϥ� ${1} ���覡.
�{�b�W�檺�ƦC�覡���I�����. �n�p��ץ��L?�A�i�H�o�ˤl�ոլ�
�p�G�b�Ĥ��Ӧ�m�O�ťզr���A�N�A���J�@�Ӫťզr��:
vi: s/^\(....\) /\1 /g
emacs: '^\(....\) ' replaced by '\1 '
perl: perl -pe 's/^(....) /${1} /g' phonelist.txt
�{�b�q�ܦW��ݰ_�ӹ��O�o��
Phone Name ID
...
3412 Bob 123
3834 Jonny 333
12248 Kate 634
14223 Tony 567
2567 Peter 435
3567 Alice 535
15248 Kerry 534
...
�{�b���P�ƥH�H�u���覡�s��o�ӦW��åB�����|�b��r�檺�}�Y
���J�@�Ǫťզr��. �ڭ̭n�p��@�~����N�����h?
Phone Name ID
...
3412 Bob 123
3834 Jonny 333
12248 Kate 634
14223 Tony 567
2567 Peter 435
3567 Alice 535
15248 Kerry 534
...
�o�Ӱ��D���Ӧp���ѨM:
vi: s/^ *// (���ڭ̤��ϥ� + �ɥ����ϥ� 2 �Ӫťզr��)
emacs: '^ +' replaced by the empty string
perl: perl -pe 's/^ +//' phonelist.txt
���A�b���g�{���ɨϥΤF temp �P temporary �G���ܼ�. �{�b�A�Q�n
�N�ܼ� temp ���ܼƦW�٧אּ counter. �p�G�A�ҧ@���u�O�N�� temp
�o�Ӧr��h�ܼ� temporary �|�ܦ� counterorary �o���M���O�A�Q�n��
���G.
���W�B�⦡�i�H�ѨM�o�Ӱ��D. �A�u�n�N temp([^o]) �N���� counter\1
�Y�i. �]�N�O��, �u�N�� temp �åB���t�r�� o ���r��. (�t�@�ӸѨM�覡
�N�O�ϥ���ɦr�����O�ڭ̨ä��b�o�����w��r���˦����Q�צo.)
�ڧƱ�o�g�峹����E�o�_�A�勵�W�B�⦡������. �{�b�A�i�ॲ���h
�ݤ@�U�A�Ҩϥνs�边���ާ@�����P���H�K�J�Ӿ�Ѩ䥿�W�B�⦡���\��.
�٦��\�h�S���r�����ണ��A ���O����r��" | "
�L�㦳 "�Ϊ�" ���N��H�Ϋe���һ�����ɦr��.
�̫�q���U��r�֡A �ï���αo�R���ֽ�C
|