Home Map Index Search News Archives Links About LF
[Top Bar]
[Bottom Bar]
[æÏÔÏ Á×ÔÏÒÁ]
Guido Socher
� ������: ����� ������ ������, ��� ��� ��������� ������� � ����� ���������� ����� ������������ �������� � Linux ����������� ����� ����. �� �������� ���� ��������� ����� �� ����� ���������, ������� ����� BBC, �������� �� ��������� �� ������ ���� � �������� ������������ ����� � Linux.

�������� ������


����������:
��������
������� ������
���������
������������� ���������� ��������� ��� �������������� ������

���������� ���������

[Illustration]

������: ���������� ��������� ������������ ��� ������������ ������������ ������ � ����������� ������. ��� ����� ���� �� ������ ���������������� ����������, � ���������� ��������������� ������� (parser programs) � � ������.




��������

���������� ��������� ����������� �� ������ ���������� ����� ��� vi � emacs, � ���������� grep/egrep � ������ ����� ��� awk, perl � sed.

���������� ��������� ������������ ��� ������������ ������������ ������ � ����������� ������. ���������� ��������� - ��� ���������� �������� �������, ������� ������������ ��������� ������.

����� � ������ ��������� ��� ����� ��������, ������������� ���������� ���������, � ��� ��������. ������ �������������� � ������ ������, ������� ������ �������� ����, ����� ���� ��������� ������ �� ��������� ������. ������ � �� ������� ��� ���������, ������� � ������ �� ������. ��� ��������� ��� �������� ���������� �����, ������, ��������� � ��������� ������ ��������. ����� � ����� ������ ��� ��� �������� � � ����������� � ���������, ��� ��� ����� ����� � �������������. ��� ����������� ���������� ������� �������������� ��������.

���� ���������� ��������� ����� ������ �������������� � ���� Unix, �� �� ���������� ����� ����� ��� '����������� ���� ���������� ���������'. ���������� ��������� ��������� ���������. �������� ���������� ��� ���� ��������� grep; grep � egrep. ��� ���������� ���������� ��������� � ������������� ������������� �������������. Perl �������� ����� ����� ������ ����� ���������� ���������. � ������� ��� ��� ������� ����� ���������. ��� ������ �� ������� �������� ����, �� ��� ����� ����� ������� ������ ��������� ���������.

��� ������ ������ ��� � ������ � �� ������� ������� ��������� ������� � ����������� �������� �� �� man-���������.

������� ������

����� �� ������ ������ ��������� �������� � �� �������� ������� �����:

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 �������. ��� ������ ������ � ������� ��������� �����. ������� � ������ ������ ����������� ������ ������ 1 �������� � �������� N 1. ��� �������� � �������� 1 ?

���������� ��������� ������ �����:
grep '^1' phonelist.txt
���
egrep '^1' phonelist.txt
���
perl -ne 'print if (/^1/)' phonelist.txt

�� ������ ��� ������, ������ ��� ������, ������� ���������� � �������. "^" ������������� ������ ������. ��������� ����� ������� ��������� ������������� ������ ��� �������, ������� ���������� � �������.

���������

�������������� �������

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

�� ��� �������, ��� ����������� ASCII �������� ������ ������������� ���� �� ASCII ��������, �� ��������� ASCII �������, ���������� �������������, ����� ����������� ��������. �������� ���������� ������ ������������ �����. ����� "-" � ������ ��� ��������. ����� �������� ����������� �������� ����������� ����� ��������� ����� ��� �������� ����. ������ ����� - ���� ����� � [a-zA-Z0-9\-]. � ��������� ��������� ���������� ��������� ����������� ���������� � ��������� �����. � ���� ������ �� ������ ������� �������� ����, ��� �� �������� ���������� �������� �������.

����� ��� ������ ����������. ��� ������������� ������ ������� ����� ������� ����� ������. ������:

grep '^.2' phonelist.txt
 or
egrep '^.2' phonelist.txt

��� ��������� ������������ ��� ������ ����� � ������ 2 �� ������ ������� � ����� ������ ��������.

���� ����������� ������ ���������� � "[^" ������ "[" �� ��� �������� ��������� ����� ������ (��� ������� ����� ���������). ������ "^" ������ �� �������� ������ ������, �� � ���������� � "[" ���������� ��������� ������.

[0-9]    �������������� ������, ������� �������������
         ����� ����� �� 0 �� 9. 
[^0-9]   ������������� ������ ������ �� ��������� �������.
[^abc]   ������������� ������ �������, ������� �� a,b ��� c.
 .       ����� ������������� ������ ������� �������� ������ ����� ������.
         ��� ���� ����� ��� [^\n]. ��� \n - ������ ����� ������.

��� ���������� ���� �����, ������� �� ���������� � 1 �� �����
��������:
grep '^[^1]' phonelist.txt
���
egrep '^[^1]' phonelist.txt

������������ ��������

� ���������� ����� �� ��� �������, ��� "^" ������������� ������ ������. ������������ �������� ������������ ��� ������ ����������� ��������, ������� ������������� ������������ ������� � ������, � �� ������ �������.

^  ������������� ������ ������
$  ������������� ����� ������

����� ����� �������� � ID ����� 567 � ����� phonelist.txt �� ����� ������������:

egrep '567$' phonelist.txt

��� ������� ������ � ������ 567 � �����.

���������

��������� ���������� ������� ��� �������������� ������ ����������� � ������.

��������grepegrepperlvivimvileelvisemacs
���� ��� ������ ���********
���� ��� ������ ���\{1,\}++  \+\+\++
���� ��� ���� ���\???  \=\?\=?
�� n �� m ���\{n,m\}  {n,m}      \{n,m\}\{n,m\}

����������: ��������� VI'� ����� ���������� ����� ��������� ��� ���� ����� ��� �������� ��� �������� ����.

������ �� ����������� ������:

....
1248   Kate 634
....
1548  Kerry 534
....

��� ���������� �����, ������� ���������� � 1, � ����� ��������� ����, ��� ������� ���� ������ � ��� ������������ � ����� � �� ����� ��������:

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"

��� �� ����� ������, ��� ��������� �������� ���������. ��� ��������, ��� �������� ������� ��������� � ������� ���������������� �������, ��� ������ ��� ��� ��������.

��������� ^1.*4 
����� ��������������� ���� ������ 
1548  Kerry 534
� ������ � �� ����� ��������� 4.
�.�. ��� ������������� �� ������ 154, � ���� ������. 

��� �� ����� �������� �������� ��� grep, �� ����� ��� �������������� � �����������.

������� ������ ��� ������ �����������

������� ������ �� �������� �������� ���������, ��� ���� ������ ������������ ������������ �������� ����� ������ ��� ����, ����� ����� ���� ��������� �� ��� � ��������� �������.

����������� ����� �������� ����� ����������. ����� ������ ������������ ������ ����� ������ �������� ����� ���������� ����, ������ ����� ���������� ��� � �.�.

��� ������������������ ��������������� ����������
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 �������� ����� �
� ���������� \2 ����� t. 

��� ����� ��������������� ����� anna, ��
�� yxyx.

������� ������ ��� ������ ����������� �� ��� ����� ������������ ��� ���������� ����� ���� ��� otto � anna, � ����������� ��� �������������� � �����������.

������������� ���������� ��������� ��� �������������� ������

��� �������������� ��� ��������� �������� ����� ��� vi, emacs ��� �� ������ ������������ �������� perl.

� emacs �� ����������� M-x query-replace-regexp ��� �� ������ ��� ����� �������������� ����� �������������� �������. ��� �� ������ ����� ������������ ������� replace-regexp. ������� query-replace-regexp �������������, ������ ���.

� vi ������������ ������� ����������� :%s/ / /gc. ������� ���������� �������� '���� ����' � ����� ���� ������� ����� ���������� ����������. � vim �� ��������� shift-v, ��������� ������� � ����� ����������� ����������� ������ � ���� �������. � �� ���� �������� ������ � vim ������, ��� ��� ������ ���� � ��� ����������� �����������. ������������� ������ ������� ��� 's/ / /gc', � �� ������������� ��� s/ / /g

��������������� ��������, ��� �� ������ ������ ����������� ��������� ��� ��� ����������� � ������ ������.

� Perl'� �� ������ ������������

perl -pe 's/ / /g' 

���������� ��������� ��������. ���� ��������� � ����� �������� ��������� � �� ���� ���������� �������, ������� ���������� � 1 ���������� �������� 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.\)   ���������� ��  \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
     ...

���� ����� ������������ ���������� � �������� ������ ��� �� \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/^  *//  (����� 2 �������, �.�. �� �� ����� +)
emacs:  '^ +'  �������� ������ �������
perl:   perl -pe 's/^ +//' phonelist.txt

�� ������ ��������� � � ��� � ��� ���� ���������� temp � temporary. ������ �� ������ �������� ���������� temp ���������� counter. ���� �� ������ �������� ������ temp �� counter, �� ����� ���������� temporary ������ counterrary, ��� ������ �� ��, ��� �� ������.

���������� ��������� ����� ������� ���. ������ ������ temp([^o]) �� counter\1. ��� ������ temp ��� ����� o. (�������������� �������� ����� ���� ������������� ������, �� �� �� ������������� ���� ������ �������� �������.)

� �������, ��� ��� ������ ��� ��������������. ������ �� ������ �������� ��������� � man-�������� � ������������ ������ �������� ��������� � ������� �����������.

���� ��� ����� ������ ����������� �������� ����� ���, �������� ������� �������, ���� "���" � ����� ������� ������ ����, ����������� ����.

�����, ����������� ��������������.

�������: ������ ������ ������ �������


This website is maintained by Miguel Angel Sepulveda
© Guido Socher 1998
LinuxFocus 1998