Αναζήτηση κειμένου σε αρχείο
Αν προσπαθήσατε ποτέ να εισχωρήσετε στα πιο “βαθειά νερά” του UNIX, θα χρειαστήκατε σίγουρα σε κάποια στιγμή να βρείτε κάποιο αρχείο που να περιέχει κάποιο συγκεκριμένο κείμενο. Κατά πάσα πιθανότητα θα χρησιμοποιήσατε κάποια από τις εντολές grep για να κάνετε την αναζήτηση. Οι εντολές αυτές προσφέρουν, με μικρές παραλλαγές η κάθε μία, τρόπους αναζήτησης κειμένου ή κανονικών παραστασεων (regular expressions) σε αρχεία κειμένου (χωρίς να περιορίζεται η χρήση τους μόνο σε αυτά).
Οι εντολές grep, fgrep, egrep, rgrep
Υπάρχουν τέσσερις εντολές grep, η γενικής χρήσης grep, η fgrep που δε χρησιμοποιεί μεταχαρακτήρες, η egrep που ειδικεύεται στην αναζήτηση με μεταχαρακτήρες και η rgrep που δρα αναδρομικά σε καταλόγους. Συγκεκριμένα,
- Η fgrep ειδικεύεται στην αναζήτηση αυτούσιων κομματιών κειμένου, χωρίς την ανάγκη χρήσης μεταχαρακτήρων όπως *, ?, $, ^, κλπ.
- Η egrep χρησιμοποιεί το πλήρες σύνολο των μεταχαρακτήρων και κανονικών παραστάσεων και θεωρείται η πιο γρήγορη από τις τρεις.
- Η rgrep δεν είναι άλλο από αναδρομική grep (ενεργοποιεί την επιλογή -r στη grep).
Στην πραγματικότητα δεν πρόκειται για τεσσερις διαφορετικές εντολές αλλά για συντομεύσεις της ίδιας εντολής. Σε παλαιότερα συστήματα UNIX ήταν όντως τρείς εντολές (grep, fgrep, egrep) αλλά στο πακέτο GNU grep που διανέμεται με το Debian, πρόκειται για μία εντολή με επιπλέον τρια σενάρια κελύφους που λειτουργούν ως wrappers(?): fgrep, egrep και rgrep. Η σύνταξή της είναι η εξής:
grep [OPTIONS] pattern file fgrep [OPTIONS] pattern file egrep [OPTIONS] pattern file rgrep [OPTIONS] pattern file
όπου file το αρχείο ή τα αρχεία στα οποία θέλουμε να αναζητήσουμε κείμενο, ή αν δεν δίνεται αρχείο θεωρείται ή πρότυπη είσοδος (standard input). Ως pattern δίνουμε το κείμενο που θέλουμε να αναζητήσουμε ή την κανονική παράσταση που περιέχει μεταχαρακτήρες. Για τις εντολές grep ισχύουν οι εξής επιλογές:
|
Επιλογές
|
Λειτουργία
|
| -E | Ισοδύναμο με την κλήση της egrep. |
| -F | Ισοδύναμο με την κλήση της fgrep. |
|
-r, -R --recursive |
Ισοδύναμο με την κλήση της rgrep. Πραγματοποιεί την αναζήτηση αναδρομικά σε όλους τους καταλόγους και στα αρχεία που περιέχονται σε αυτούς. |
|
-f FILE --file FILE |
Πραγματοποιεί την αναζήτηση χρησιμοποιώντας τις κανονικές παραστάσεις ή το κείμενο που περιέχεται στο αρχείο FILE. |
|
-i --ignore-case |
Αγνοεί τις διαφορές μεταξύ πεζών-κεφαλαίων γραμμάτων. |
|
-l --files-with-matches |
Εμφανίζει μόνο τους τίτλους των αρχείων για τα οποία πέτυχε η αναζήτηση. |
|
-L --files-without-matches |
Εμφανίζει μόνο τους τίτλους των αρχείων για τα οποία απέτυχε η αναζήτηση. |
|
-n --line-number |
Εμφανίζει τις γραμμές αριθμημένες. |
|
-v --invert-match |
Αντιστρέφει την αναζήτηση. Αναζητά γραμμές κειμένου που δεν ταιριάζουν με το δοθέν κείμενο ή κανονική παράσταση. |
Για περισσότερες πληροφορίες για τις κανονικές παραστάσεις ανατρέξατε στο κεφ. και στις σελίδες οδηγιών ή στα κείμενα πληροφοριών της grep (man, info).
Παραθέτουμε ορισμένα παραδείγματα χρήσης της grep:
$ ps aux|grep ssh root 733 0.0 0.3 2684 744 ? S Jun27 0:00 /usr/sbin/sshd feanor 9895 0.0 0.3 2796 712 pts/5 R 21:29 0:00 grep ssh
Εμφανίζει τις διεργασίες που περιέχουν τη λέξη ssh στο όνομά τους (όπως αυτό φαίνεται με την εντολή ps). Περισσότερα για τις διεργασίες και για την εντολή ps θα δούμε στο επόμενο κεφ.
$ grep -lr sqrt /usr/include/ /usr/include/bits/mathinline.h /usr/include/bits/mathcalls.h /usr/include/bits/cmathcalls.h /usr/include/math.h /usr/include/tgmath.h /usr/include/linux/sysctl.h
Επιστρέφει τη λίστα όλων των αρχείων που βρίσκονται στον κατάλογο /usr/include και περιέχουν αναφορά στο υποπρόγραμμα της γλώσσας C sqrt (square root, τετραγωνική ρίζα).
$ grep -v ^[A-z] userslist
Αν userslist είναι ένα αρχείο με λίστα χρηστών, η εντολή αυτή επιστρέφει τις γραμμές εκείνες που περιέχουν ονόματα χρηστών που δεν αρχίζουν με λατινικούς χαρακτήρες.
$ grep -i “john smith” userslist
Στο ίδιο αρχείο, επιστρέφει τις γραμμές στις οποίες αναφέρεται το όνομα “john smith” αλλά και “JOHN SMITH”, “John Smith” κλπ.
Active forum topics
- Wake up from suspend mode failed
- Οργάνωση στις μεταφράσεις των ελληνικών στο Debian.
- απορια σχετικα με nvidia440
- πρόβλημα εγκατάστασης nvidia driver GTS250.
- kernel 2.6.38 για squeeze
- Gnome3
- 2 μήνες σπασμένο το upgrade σε unstable [SOLVED]
- Οι χρήστες του Internet Explorer είναι χαζοί;
- Debian Lenny + Nvidia drivers
- εγκατασταση usb cosmote
New forum topics
Νέοι χρήστες
- kountp
- Adonthegreat
- giorgos_m
- prodromos
- airmaik
Οι πιο πρόσφατες καταχωρίσεις blog.
- Fosscomm 2012
- armhf officially into Debian!
- back from UDS/Linaro Connect...
- FTF is over, Linaro Interview
- straight from FTF 2011, San Antonio...
- Όσο μεγαλώνεις μαθαίνεις...
- Emdebian 2011 Sprint report, Genesi Europe store goes online...
- Θεσσαλονίκη - open source ERP workshop
- Χρήσιμο URL για Flash Cards και Linux filesystems
- Cambridge, UK, ARM HQ for Emdebian 2011 Sprint