Მაგალითი იყენებს Linux grep ბრძანება

შესავალი

Linux grep ბრძანება გამოიყენება მეთოდის ფილტრაციის მეთოდად.

GREP წარმოადგენს გლობალური რეგულარული გამოხატვის პრინტერს და, შესაბამისად, ის ეფექტურად გამოიყენეთ, უნდა იცოდეთ რეგულარული გამოხატვის შესახებ.

ამ სტატიაში, მე ვაპირებ გაჩვენოთ მთელი რიგი მაგალითები, რომელიც გესმით grep ბრძანება.

01 09

როგორ მოვძებნოთ სიმებიანი ფაილი გამოყენებით GREP

Linux grep ბრძანება.

წარმოიდგინეთ, თქვენ გაქვთ ტექსტური ფაილი მოუწოდა წიგნები შემდეგ ბავშვთა წიგნის ტიტული:

მოძებნეთ ყველა წიგნი სიტყვა "The" - ში სათაურით გამოიყენეთ შემდეგი სინტაქსი:

grep წიგნები

შემდეგი შედეგები დაუბრუნდება:

თითოეულ შემთხვევაში, სიტყვა "The" იქნება ნაჩვენები.

გაითვალისწინეთ, რომ ძიება მგრძნობიარეა იმ შემთხვევაში, თუ ერთ-ერთ სათაურში "არ" ნაცვლად "ის" იყო, მაშინ ის არ დაბრუნდებოდა.

იმ შემთხვევაში, თუ იგნორირება შეგიძლიათ, შეგიძლიათ დაამატოთ შემდეგი შეცვლა:

grep წიგნები --ignore შემთხვევაში

თქვენ ასევე შეგიძლიათ გამოიყენოთ -i switch შემდეგნაირად:

grep -i წიგნები

09 09

ძიება სიმებიანი ფაილის გამოყენებით Wildcards

Grep ბრძანება არის ძალიან ძლიერი. თქვენ შეგიძლიათ გამოიყენოთ უამრავი ნიმუში შესაბამისი მეთოდები, რათა გავფილტროთ შედეგები.

ამ მაგალითში, მე გაჩვენებთ თუ როგორ უნდა მოძებნოთ სიმბოლო ფაილი შიგნით ველების გამოყენებით.

წარმოიდგინეთ, რომ თქვენ გაქვთ ფაილის სახელი შემდეგი შოტლანდიურ ადგილის სახელებით:

აბერდინი

aberystwyth

აბერუორი

ინვერსიული

ინვერსია

newburgh

ახალი ირმის

ახალი galloway

გლაზგო

edinburgh

თუ გსურთ იპოვოთ ყველა ადგილი ინვერტორული სახელით, გამოიყენეთ შემდეგი სინტაქსი:

grep inver * ადგილები

ვარსკვლავით (*) ველური ბარათი 0 ან ბევრს ნიშნავს. აქედან გამომდინარე, თუ თქვენ გაქვთ ადგილი ინვერსში ან ადგილას მოუწოდა inverness მაშინ ორივე დაბრუნდება.

სხვა wildcard შეგიძლიათ გამოიყენოთ არის პერიოდი (.). შეგიძლიათ გამოიყენოთ ეს ერთი წერილით.

grep inver.r ადგილები

ზემოხსენებული ბრძანება აღმოჩნდება ინვერსიისა და ინვერსიის ადგილებზე, მაგრამ ვერ მოიძებნა მწვავეობა, ვინაიდან მხოლოდ ერთი სარქველი შეიძლება იყოს ორი პერიოდის განმავლობაში, როგორც ერთჯერადი პერიოდის მიხედვით.

პერიოდი wildcard სასარგებლოა, მაგრამ ეს შეიძლება გამოიწვიოს პრობლემები, თუ თქვენ გაქვთ ერთი ნაწილი, რომელიც თქვენ ეძებთ.

მაგალითად, შევხედოთ დომენური სახელების ამ სიას

იმისათვის, რომ იპოვოთ ყველა about.com- ზე, თქვენ შეგიძლიათ მოძებნოთ შემდეგი სინტაქსი:

grep * შესახებ * domainnames

ზემოთ მოცემული ბრძანება დაეცემა თუ სიაში შედის შემდეგი სახელი:

აქედან გამომდინარე, შეგიძლიათ სცადოთ შემდეგი სინტაქსი:

grep * about.com domainnames

ეს იმუშავებდა OK თუ არ არსებობდა დომენი შემდეგი სახელით:

aboutycom.com

მართლაც მოძებნოთ ტერმინს შესახებ about.com თქვენ უნდა გაქცევა dot შემდეგნაირად:

grep * შესახებ \ .com დომენი

საბოლოო ველური ბარათი, რომელიც გაჩვენებთ არის კითხვის ნიშანი, რომელიც დგას ნულოვანი ან ერთი სიმბოლო.

მაგალითად:

grep? ber placenames

ზემოხსენებული ბრძანება აბერდენი, აბერიდტიტი ან ბერვიკი დაბრუნდება.

09 09

ძიება სტრინგებისთვის გემო და ბოლოს ხაზი grep- ის გამოყენებით

კარატი (^) და დოლარი ($) სიმბოლო საშუალებას გაძლევთ მოძებნოთ ნიმუში დასაწყისში და ბოლოს ხაზები.

წარმოიდგინეთ, რომ თქვენ გაქვთ ფეხბურთის სახელი ფეხბურთის სახელით:

თუ თქვენ უნდოდათ იპოვოთ ყველა გუნდი, რომელიც მანჩესტერში დაიწყო, გამოიყენეთ შემდეგი სინტაქსი:

grep ^ მანჩესტერის გუნდები

აღნიშნული ბრძანება მანჩესტერ სიტისა და მანჩესტერ იუნაიტედის დაბრუნებას შეძლებდა, მაგრამ მანჩესტერ იუნაიტედი არ დაუტოვა.

ალტერნატიულად თქვენ ნახავთ ყველა გუნდს, რომელიც მთავრდება გაერთიანებული გამოყენებით შემდეგი სინტაქსი:

grep United $ გუნდები

ზემოხსენებული ბრძანება მანჩესტერ იუნაიტედისა და ნიუკასლ იუნაიტედის დაბრუნებას შეძლებდა, მაგრამ მანჩესტერ იუნაიტედის წინააღმდეგ

04 09

დათვლა ხმების მატჩები გამოყენება grep

თუ არ გინდათ, რომ დაბრუნდეთ ნამდვილი ხაზები, რომლებიც შეესაბამება ნიმუშს grep- ს გამოყენებით, მაგრამ თქვენ უბრალოდ გვინდა ვიცოდე რამდენი შეგიძლიათ გამოიყენოთ შემდეგი სინტაქსი:

grep -c ნიმუში inputfile

თუ ნიმუში შეესაბამება ორჯერ მაშინ ნომერი 2 იქნება დაბრუნდა.

09 09

ყველა იმ პირობების მოძიება, რომლებიც არ ემთხვევა grep- ს გამოყენებით

წარმოიდგინეთ, რომ ჩამოთვლილ ქვეყნებთან ერთად ჩამოთვლილია შემდეგი სახელები:

თქვენ შეიძლება შენიშნა, რომ colwyn bay არ აქვს ქვეყანა ასოცირდება მას.

ქვეყნის ყველა ადგილის ძიება, შეგიძლიათ გამოიყენოთ შემდეგი სინტაქსი:

grep მიწის $ ადგილებში

შედეგები ბრუნდება ყველა ადგილას, გარდა colwyn bay.

ეს აშკარად მუშაობს მხოლოდ იმ ადგილებში, სადაც დასრულდება მიწა (ძნელად სამეცნიერო).

შეგიძლიათ აირჩიოთ შერჩევა შემდეგი სინტაქსის გამოყენებით:

grep -v მიწის $ ადგილებში

ეს იპოვის ყველა იმ ადგილს, რომელიც არ დასრულებულა მიწაზე.

09 09

როგორ მოვძებნოთ ცარიელი ხაზები ფაილი გამოყენებით grep

წარმოიდგინეთ თქვენ გაქვთ შეყვანის ფაილი, რომელიც გამოიყენება მესამე მხარის აპლიკაციით, რომელიც შეწყვეტას კითხულობს ფაილს, როდესაც ის პოულობს ცარიელი ხაზს შემდეგნაირად:

როდესაც განაცხადის იღებს ხაზის შემდეგ 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 ფრჩხილები {} რათა მოძებნოთ განმეორებითი ნიმუში.

წარმოიდგინეთ, რომ თქვენ გაქვთ ფაილი ტელეფონის ნომრები შემდეგნაირად:

თქვენ იცით, რომ ნომრის პირველი ნაწილი უნდა იყოს სამი ციფრი და გინდათ იპოვოთ ხაზები, რომლებიც არ შეესაბამება ამ ნიმუში.

წინა მაგალითიდან იცით, რომ [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

შემაჯამებელი

Grep ბრძანება არის ფუნდამენტური Linux ბრძანება და ეს არის ის, რომ კარგად არის სწავლა, რადგან ის გახდის თქვენს ცხოვრებაში ბევრად უფრო ადვილია, როდესაც ეძებს ფაილებისა და პროცესების გამოყენებისას ტერმინალის.