შესავალი
Linux grep ბრძანება გამოიყენება მეთოდის ფილტრაციის მეთოდად.
GREP წარმოადგენს გლობალური რეგულარული გამოხატვის პრინტერს და, შესაბამისად, ის ეფექტურად გამოიყენეთ, უნდა იცოდეთ რეგულარული გამოხატვის შესახებ.
ამ სტატიაში, მე ვაპირებ გაჩვენოთ მთელი რიგი მაგალითები, რომელიც გესმით grep ბრძანება.
01 09
როგორ მოვძებნოთ სიმებიანი ფაილი გამოყენებით GREP
წარმოიდგინეთ, თქვენ გაქვთ ტექსტური ფაილი მოუწოდა წიგნები შემდეგ ბავშვთა წიგნის ტიტული:
- რობინ ჰუდი
- წითელქუდა
- პიტერ პან
- Goldilocks და სამი დათუნიები
- ფიფქია და შვიდი ჯუჯა
- პინოხიო
- კატა ქუდში
- სამი პატარა ღორი
- გრუოფალო
- ჩარლი და შოკოლადის ქარხანა
მოძებნეთ ყველა წიგნი სიტყვა "The" - ში სათაურით გამოიყენეთ შემდეგი სინტაქსი:
grep წიგნები
შემდეგი შედეგები დაუბრუნდება:
- Goldilocks და სამი დათუნიები
- ფიფქია და შვიდი ჯუჯა
- კატა ქუდში
- სამი პატარა ღორი
- გრუოფალო
- ჩარლი და შოკოლადის ქარხანა
თითოეულ შემთხვევაში, სიტყვა "The" იქნება ნაჩვენები.
გაითვალისწინეთ, რომ ძიება მგრძნობიარეა იმ შემთხვევაში, თუ ერთ-ერთ სათაურში "არ" ნაცვლად "ის" იყო, მაშინ ის არ დაბრუნდებოდა.
იმ შემთხვევაში, თუ იგნორირება შეგიძლიათ, შეგიძლიათ დაამატოთ შემდეგი შეცვლა:
grep წიგნები --ignore შემთხვევაში
თქვენ ასევე შეგიძლიათ გამოიყენოთ -i switch შემდეგნაირად:
grep -i წიგნები
09 09
ძიება სიმებიანი ფაილის გამოყენებით Wildcards
Grep ბრძანება არის ძალიან ძლიერი. თქვენ შეგიძლიათ გამოიყენოთ უამრავი ნიმუში შესაბამისი მეთოდები, რათა გავფილტროთ შედეგები.
ამ მაგალითში, მე გაჩვენებთ თუ როგორ უნდა მოძებნოთ სიმბოლო ფაილი შიგნით ველების გამოყენებით.
წარმოიდგინეთ, რომ თქვენ გაქვთ ფაილის სახელი შემდეგი შოტლანდიურ ადგილის სახელებით:
აბერდინი
aberystwyth
აბერუორი
ინვერსიული
ინვერსია
newburgh
ახალი ირმის
ახალი galloway
გლაზგო
edinburgh
თუ გსურთ იპოვოთ ყველა ადგილი ინვერტორული სახელით, გამოიყენეთ შემდეგი სინტაქსი:
grep inver * ადგილები
ვარსკვლავით (*) ველური ბარათი 0 ან ბევრს ნიშნავს. აქედან გამომდინარე, თუ თქვენ გაქვთ ადგილი ინვერსში ან ადგილას მოუწოდა inverness მაშინ ორივე დაბრუნდება.
სხვა wildcard შეგიძლიათ გამოიყენოთ არის პერიოდი (.). შეგიძლიათ გამოიყენოთ ეს ერთი წერილით.
grep inver.r ადგილები
ზემოხსენებული ბრძანება აღმოჩნდება ინვერსიისა და ინვერსიის ადგილებზე, მაგრამ ვერ მოიძებნა მწვავეობა, ვინაიდან მხოლოდ ერთი სარქველი შეიძლება იყოს ორი პერიოდის განმავლობაში, როგორც ერთჯერადი პერიოდის მიხედვით.
პერიოდი wildcard სასარგებლოა, მაგრამ ეს შეიძლება გამოიწვიოს პრობლემები, თუ თქვენ გაქვთ ერთი ნაწილი, რომელიც თქვენ ეძებთ.
მაგალითად, შევხედოთ დომენური სახელების ამ სიას
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everydaylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
იმისათვის, რომ იპოვოთ ყველა about.com- ზე, თქვენ შეგიძლიათ მოძებნოთ შემდეგი სინტაქსი:
grep * შესახებ * domainnames
ზემოთ მოცემული ბრძანება დაეცემა თუ სიაში შედის შემდეგი სახელი:
- everydaylinuxuser.com/about.html
აქედან გამომდინარე, შეგიძლიათ სცადოთ შემდეგი სინტაქსი:
grep * about.com domainnames
ეს იმუშავებდა OK თუ არ არსებობდა დომენი შემდეგი სახელით:
aboutycom.com
მართლაც მოძებნოთ ტერმინს შესახებ about.com თქვენ უნდა გაქცევა dot შემდეგნაირად:
grep * შესახებ \ .com დომენი
საბოლოო ველური ბარათი, რომელიც გაჩვენებთ არის კითხვის ნიშანი, რომელიც დგას ნულოვანი ან ერთი სიმბოლო.
მაგალითად:
grep? ber placenames
ზემოხსენებული ბრძანება აბერდენი, აბერიდტიტი ან ბერვიკი დაბრუნდება.
09 09
ძიება სტრინგებისთვის გემო და ბოლოს ხაზი grep- ის გამოყენებით
კარატი (^) და დოლარი ($) სიმბოლო საშუალებას გაძლევთ მოძებნოთ ნიმუში დასაწყისში და ბოლოს ხაზები.
წარმოიდგინეთ, რომ თქვენ გაქვთ ფეხბურთის სახელი ფეხბურთის სახელით:
- ბლექპული
- ლივერპული
- ქალაქი მანჩესტერი
- ლესტერ ქალაქი
- მანჩესტერ იუნაითედი
- Newcastle United
- მანჩესტერ იუნაიტედი
თუ თქვენ უნდოდათ იპოვოთ ყველა გუნდი, რომელიც მანჩესტერში დაიწყო, გამოიყენეთ შემდეგი სინტაქსი:
grep ^ მანჩესტერის გუნდები
აღნიშნული ბრძანება მანჩესტერ სიტისა და მანჩესტერ იუნაიტედის დაბრუნებას შეძლებდა, მაგრამ მანჩესტერ იუნაიტედი არ დაუტოვა.
ალტერნატიულად თქვენ ნახავთ ყველა გუნდს, რომელიც მთავრდება გაერთიანებული გამოყენებით შემდეგი სინტაქსი:
grep United $ გუნდები
ზემოხსენებული ბრძანება მანჩესტერ იუნაიტედისა და ნიუკასლ იუნაიტედის დაბრუნებას შეძლებდა, მაგრამ მანჩესტერ იუნაიტედის წინააღმდეგ
04 09
დათვლა ხმების მატჩები გამოყენება grep
თუ არ გინდათ, რომ დაბრუნდეთ ნამდვილი ხაზები, რომლებიც შეესაბამება ნიმუშს grep- ს გამოყენებით, მაგრამ თქვენ უბრალოდ გვინდა ვიცოდე რამდენი შეგიძლიათ გამოიყენოთ შემდეგი სინტაქსი:
grep -c ნიმუში inputfile
თუ ნიმუში შეესაბამება ორჯერ მაშინ ნომერი 2 იქნება დაბრუნდა.
09 09
ყველა იმ პირობების მოძიება, რომლებიც არ ემთხვევა grep- ს გამოყენებით
წარმოიდგინეთ, რომ ჩამოთვლილ ქვეყნებთან ერთად ჩამოთვლილია შემდეგი სახელები:
- აბერდინი სკოტლანდ
- glasgow scotland
- ლივერპული ინგლისი
- colwyn bay
- ლონდონი, ინგლისი
თქვენ შეიძლება შენიშნა, რომ colwyn bay არ აქვს ქვეყანა ასოცირდება მას.
ქვეყნის ყველა ადგილის ძიება, შეგიძლიათ გამოიყენოთ შემდეგი სინტაქსი:
grep მიწის $ ადგილებში
შედეგები ბრუნდება ყველა ადგილას, გარდა colwyn bay.
ეს აშკარად მუშაობს მხოლოდ იმ ადგილებში, სადაც დასრულდება მიწა (ძნელად სამეცნიერო).
შეგიძლიათ აირჩიოთ შერჩევა შემდეგი სინტაქსის გამოყენებით:
grep -v მიწის $ ადგილებში
ეს იპოვის ყველა იმ ადგილს, რომელიც არ დასრულებულა მიწაზე.
09 09
როგორ მოვძებნოთ ცარიელი ხაზები ფაილი გამოყენებით grep
წარმოიდგინეთ თქვენ გაქვთ შეყვანის ფაილი, რომელიც გამოიყენება მესამე მხარის აპლიკაციით, რომელიც შეწყვეტას კითხულობს ფაილს, როდესაც ის პოულობს ცარიელი ხაზს შემდეგნაირად:
- აბერდინი სკოტლანდ
- inverness scotland
- ლივერპული ინგლისი
- colwyn bay wales
როდესაც განაცხადის იღებს ხაზის შემდეგ liverpool იგი შეწყვეტს კითხვის მნიშვნელობა colwyn bay გამოტოვა მთლიანად.
შეგიძლიათ გამოიყენოთ grep ცარიელი ხაზების მოძიება შემდეგი სინტაქსისთვის:
grep ^ $ ადგილებში
სამწუხაროდ ეს არ არის განსაკუთრებით სასარგებლო, რადგან ის უბრალოდ ბრუნდება ცარიელი ხაზებით.
რა თქმა უნდა, შეგიძლიათ მიიღოთ ცარიელი ხაზების რაოდენობა, როგორც შემოწმება, თუ ფაილი ძალაშია შემდეგნაირად:
grep -c ^ $ ადგილები
თუმცა უფრო სასარგებლო იქნებოდა, რომ გაეცნოთ ხაზის ნომრებს, რომლებიც ცარიელი ხაზის გასაკეთებლად შეგიძლიათ შეცვალოთ ისინი. ამის გაკეთება შეგიძლიათ შემდეგ ბრძანებით:
grep -n ^ $ ადგილები
09 09
როგორ მოვძებნოთ სიმებიანი ზედა ან ქვედა რიგები გამოყენებით grep
გამოყენებით grep შეგიძლიათ განსაზღვრავს რომელი ხაზები ფაილი აქვს ზედა სიმბოლოები გამოყენებით შემდეგი სინტაქსი:
grep '[AZ]' ფაილის სახელი
კვადრატულ ფრჩხილებში [] მოგცემთ განსაზღვრულ სიმბოლოთა სიას. ზემოთ მოყვანილ მაგალითში იგი შეესაბამება A და Z- ს შორის არსებულ ნებისმიერ ხასიათს.
ამიტომ, რომ შევადაროთ ასოები, შეგიძლიათ გამოიყენოთ შემდეგი სინტაქსი:
grep '[az]' ფაილის სახელი
თუ გსურთ მხოლოდ ასოები და არა რიცხვითი ან სხვა სიმბოლოების შესატყვისი, შეგიძლიათ გამოიყენოთ შემდეგი სინტაქსი:
grep '[a-zA-Z]' ფაილის სახელი
თქვენ შეგიძლიათ გააკეთოთ იგივე ციფრები, როგორიცაა:
grep '[0-9]' ფაილის სახელი
08 09
ვეძებთ განმეორებითი ნიმუშების გამოყენება grep
თქვენ შეგიძლიათ გამოიყენოთ curly ფრჩხილები {} რათა მოძებნოთ განმეორებითი ნიმუში.
წარმოიდგინეთ, რომ თქვენ გაქვთ ფაილი ტელეფონის ნომრები შემდეგნაირად:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
თქვენ იცით, რომ ნომრის პირველი ნაწილი უნდა იყოს სამი ციფრი და გინდათ იპოვოთ ხაზები, რომლებიც არ შეესაბამება ამ ნიმუში.
წინა მაგალითიდან იცით, რომ [0-9] დააბრუნებს ყველა ნომერს ფაილში.
ამ შემთხვევაში ჩვენ გვინდა ხაზები, რომლებიც იწყება სამი რიცხვით, რასაც მოჰყვება ჰიფენი (-). ამის გაკეთება შეგიძლიათ შემდეგ სინტაქსთან:
grep "^ [0-9] [0-9] [0-9] -" ნომრები
როგორც ვიცით წინა მაგალითებიდან carat (^) ნიშნავს, რომ ხაზი უნდა დაიწყოს შემდეგი ნიმუშით.
[0-9] ყველა ნომერს მოძებნის 0 და 9 შორის. როგორც ეს შედის სამჯერ, ეს შეესაბამება 3 ნომერს. საბოლოოდ არსებობს ჰიფენი აღინიშნოს, რომ ჰიპენმა უნდა მოიპოვოს სამი რიცხვი.
გამოყენებით curly ფრჩხილებში შეგიძლიათ ძიების პატარა შემდეგნაირად:
grep "^ [0-9] \ {3 \} -" რიცხვები
Slash escapes {bracket ისე, რომ იგი მუშაობს რეგულარული გამოხატვის, მაგრამ არსებითად, თუ რას ამბობს ის არის [0-9] {3} რაც ნიშნავს ნებისმიერი რაოდენობის 0 და 9 სამჯერ.
Curly ფრჩხილები შეიძლება გამოყენებულ იქნეს შემდეგნაირად:
{5,10}
{5,}
[5,10} ნიშნავს იმას, რომ ძიების ხასიათი უნდა ხელახლა გაიმეოროთ მინიმუმ 5 ჯერ, მაგრამ არა უმეტეს 10-ისა, ხოლო {5}} ნიშნავს იმას, რომ ხასიათი უნდა განმეორდეს მინიმუმ 5 ჯერ, მაგრამ ეს უფრო მეტია.
09 09
გამოყენება გამოყვანის სხვა ბრძანებები გამოყენება grep
ჯერჯერობით ჩვენ შევხედე ნიმუშს ინდივიდუალური ფაილების შედგენაში, მაგრამ grep- ს შეუძლია გამოიყენოს გამომავალი სხვა ბრძანებებიდან, როგორც შეყვანის ნიმუში.
ამის დიდი მაგალითია ps ბრძანება, რომელიც ასახავს აქტიურ პროცესებს.
მაგალითად აწარმოებს შემდეგ ბრძანებას:
ps -ef
თქვენი სისტემის ყველა გაშვებული პროცესი იქნება ნაჩვენები.
შეგიძლიათ გამოიყენოთ grep კონკრეტული გაშვებული პროცესი შემდეგნაირად:
ps -ef | grep firefox