Εντολές επεξεργασίας αρχείων κειμένου

Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr

Εντολές επεξεργασίας αρχείων κειμένου

Επεξεργασία αρχείων ή ροών κειμένου μπορεί να γίνει με τις παρακάτω εντολές:
grep
Εύρεση κανονικής έκφρασης
egrep
Εύρεση επαυξημένης κανονικής έκφρασης
fgrep
Εύρεση σταθερών συμβολοσειρών
tr
Μετάφραση χαρακτήρων
fmt
Συμπλήρωση λέξεων σε γραμμές
wc
Μέτρηση λέξεων, γραμμάτων, γραμμών
rev
Αντιστροφή των περιεχομένων κάθε γραμμής
diff
Εκτύπωση της διαφοράς δύο αρχείων

Παράδειγμα:

athena:~> grep Giorg names
Giorgos Tsolakakis
Giorgos Kabourakis
Giorgos Zaimis
Giorgos Margaronis
Limperis Giorgos         

athena:~> tr '[a-z]' '[A-Z]' <names 
HEALTH INSTITUTE
RAFAIL MELAS
MANOLIS GERASIMOU
ARGIRIOS ALEXOPOULOS
ANTONIS ANAGNOSTOU
VAGELIS MELETIOU
KOSTAS TSESMELIS
IOANNIS VERGIS
ATHANASIOS PANOUSOS
NIKOLAS TZANETIS         
...

athena:~> fmt names | head
Health Institute Rafail Melas Manolis Gerasimou Argirios Alexopoulos
Antonis Anagnostou Vagelis Meletiou Kostas Tsesmelis Ioannis Vergis
Athanasios Panousos Nikolas Tzanetis Maria Antoniou Nikos Michail
Ioannis Xouvardas Giorgos Tsolakakis Kostantina Tzoula Yannis Asikoglou
Ioannis Soutos Manolis Pirgiotis Dimitris Karakostas Aristidis Kalafatis
Ioannis Diakostamatis Emmanouil Tjogias Aggelos Vouros Stamatis Skoutas
Aegean Health Institute Dimitrios Rizakis Aristea Mela Alexandros
Stratinakis Vaggelis Xatzikostas Panagiotis Charalampopoulos Efi Vergi
Giorgos Kabourakis Giorgos Zaimis Konstantinos Kotis Antonis Margaros  
...

athena:~> wc names
    111     227    2023 names

athena:~> rev names | head
etutitsnI htlaeH
saleM liafaR
uomisareG silonaM
soluopoxelA soirigrA
uotsonganA sinotnA
uoiteleM silegaV
silemsesT satsoK
sigreV sinnaoI
sosuonaP soisanahtA
sitenazT salokiN                    
...

Κανονικές εκφράσεις

Οι κανονικές εκφράσεις επιτρέπουν τον ορισμό σύνθετων συμβολοσειρών με δηλωτικό τρόπο. Τα παρακάτω σύμβολα έχουν ειδικό νόημα:
^
Αρχή της γραμμής
$
Τέλος της γραμμής
.
Οποιοδήποτε γράμμα
[abc]
Ένα από τα γράμματα a, b, ή c
[a-z]
Ένα από τα γράμματα a μέχρι z
[^abc]
Οποιοδήποτε γράμμα εκτός από τα a, b, και c.
Έκφραση*
Η έκφραση μηδέν ή περισσότερες φορές
Έκφραση+
Η έκφραση μία ή περισσότερες φορές (μόνο με την egrep)
Έκφραση?
Η έκφραση μία ή καμία φορά (μόνο με την egrep)
Έκφραση1|Έκφραση1
Η έκφραση1 ή η έκφραση2 (μόνο με την egrep)
(Έκφραση)
Το περιεχόμενο στην παρένθεση (μόνο με την egrep)
\1 \2 ... \n
To περιεχόμενο της νοστής παρένθεσης (μόνο με την egrep)

Παράδειγμα:

athena:~> grep 'abo' words
...
sabotage
seaboard
taboo
thereabouts
turnabout
vagabond
whereabout
...

athena:~> grep '^abo' words
aboard
abode
abolish
abolition
abominable
abominate
aboriginal                 

athena:~> grep bent words
absorbent
bent
benthic
debenture
incumbent
recumbent

athena:~> grep 'bent$' words
absorbent
bent
incumbent
recumbent                                  

athena:~> grep -v '[AEIOUYaeiouy]' words
...
MD
MN
MPH
Mr
Mrs
Ms
m's
Mt
n
NBC                      
...

athena:~> egrep '(.)(.)(.)\3\2\1' words
braggart
Brenner
collocation
diffident
dissident
glossolalia
grammar
grammarian
installation
staccato
suffuse                         

Εντολές ροής δεδομένων και σωληνώσεων

Οι παρακάτω εντολές μπορούν να χρησιμοποιηθούν για την επεξεργασία τμημάτων αρχείων ή ροών κειμένου:
tee
Διοχέτευση αντιγράφου των δεδομένων μιας σωλήνωσης σε αρχείο
head
Εμφάνιση των αρχικών γραμμών της εισόδου
tail
Εμφάνιση των τελικών γραμμών της εισόδου

Παράδειγμα:

athena:~> ls -l | tee foo
total 251
-rw-r--r--   1 dspin    users        2847 Oct 29 16:11 afm
-rw-r--r--   1 dspin    users         627 Oct 29 19:10 bar1
drwxr-xr-x   2 dspin    users        1024 Feb 26  1997 bin/
-rw-------   1 dspin    users       29793 Jun 21 20:57 mbox
-rwxr-xr-x   1 dspin    users         100 Oct 29 17:42 myspell*
-rw-r--r--   1 dspin    users        2023 Oct 29 16:07 names
-rw-r--r--   1 dspin    users        2741 Oct 29 16:11 phones
-rw-r--r--   1 dspin    users        2741 Oct 29 18:45 phones.sorted
-rw-rw-r--   1 dspin    users         995 Mar 12  1997 submit
-rw-r--r--   1 dspin    users         272 Oct 29 19:44 t.c
-r--r--r--   1 dspin    users         547 Oct 29 19:44 t.c,v
-rw-r--r--   1 dspin    users      206662 Oct 22 15:08 words
athena:~> head -2 foo
total 251
-rw-r--r--   1 dspin    users        2847 Oct 29 16:11 afm
athena:~> tail -2 foo
-r--r--r--   1 dspin    users         547 Oct 29 19:44 t.c,v
-rw-r--r--   1 dspin    users      206662 Oct 22 15:08 words           

Βιβλιογραφία

[Hum88]
Andrew Hume. Grep wars: The strategic search initiative. In Proceedings of the EUUG Spring 88 Conference, pages 237-245. European UNIX User Group, 1988.