grep

Намиране на низове в текстови файлове с помощта на grep с регулярен израз

Намиране на низове в текстови файлове с помощта на grep с регулярен израз
grep е един от най-популярните инструменти за търсене и намиране на низове в текстов файл. Името 'grep' произлиза от команда в вече остарелия инструмент за редактиране на реда на Unix ed - командата ed за търсене в световен мащаб чрез файл за регулярен израз и тогава печат тези редове беше g / re / p, където re беше регулярният израз, който бихте използвали. В крайна сметка командата grep е написана, за да извърши това търсене във файл, когато не използва ed.

В тази статия ви показваме да стартирате предварително търсене на низове с помощта на Grep с регулярен израз, като ви дава 10 практически примера за неговите реализации. Много примери, обсъдени в тази статия, имат практически последици, което означава, че можете да ги използвате в ежедневното си програмиране на Linux. Следващите примери описват някои примери за регулярни изрази за често търсени модели.

Пример 1: Намерете един наемател в текстов файл

За да изведете редове във файла „книга“, които съдържат знак „$“, напишете:

$ grep '\ $' книга

Пример 2: Намерете единичен низ в текстов файл

За извеждане на редове във файла „книга“, който съдържа низа „$ 14.99 ', тип:

$ grep '\ $ 14 \.99 'книга

Пример 3: Намерете един специален наемател в текстов файл

За да изведете редове във файла „книга“, които съдържат знак „\“, напишете:

$ grep '\\' книга

Пример 4: Съвпадение на линии, започващи с определен текст

Използвайте 'ˆ' в регулярния израз, за ​​да означите началото на ред.

За да изведете всички редове в '/ usr / dict / words', започващи с 'pro', напишете:

$ grep 'ˆpro' / usr / dict / words

За да изведете всички редове във файла „книга“, които започват с текста „в началото“, независимо от случая, напишете:

$ grep -i 'в началото' книга

ЗАБЕЛЕЖКА: Тези регулярни изрази бяха цитирани със символи „; това е така, защото някои черупки иначе третират символа „ˆ“ като специален „метасимвол“

В допълнение към търсенето на думи и фрази, можете да използвате grep за търсене на сложни текстови модели, наречени регулярни изрази. Регулярният израз - или „regexp“ - е текстов низ от специални символи, който определя a комплект от модели, които да съвпадат.

Технически погледнато, моделите на думите или фразите са регулярни изрази - просто много прости. В регулярен израз повечето символи - включително букви и цифри - представляват себе си. Например моделът на regexp 1 съответства на низа „1“ и на шаблона момче съответства на низа „момче“.

Има редица запазени знаци, наречени метасимволи, които не се представят в регулярен израз, но имат специално значение, което се използва за изграждане на сложни модели. Тези метасимволи са както следва: ., *, [, ], ˆ, $ и \. Добре е да се отбележи, че подобни метасимволи са често срещани сред почти всички разпространени и специални дистрибуции на Linux. Ето една добра статия, която обхваща специални значения на метасимволите и дава примери за тяхното използване.

Пример 5: Съвпадащи линии, завършващи с определен текст

Използвайте „$“ като последния символ на цитирания текст, за да съответства на този текст само в края на ред. За да изведете редове във файла „върви“, завършващ с удивителен знак, въведете:

$ grep '!$ 'върви

Пример 6: Съвпадащи линии с определена дължина

За да съответствате на линии с определена дължина, използвайте този брой на '.„символи между„ ˆ “и„ $ “- например, за да съвпаднат всички редове с ширина два знака (или колони), използвайте„ ˆ… $ “като регулярно изражение, за да търсите.

За да изведете всички редове в '/ usr / dict / words' с ширина точно три знака, напишете:

$ grep 'ˆ ... $' / usr / dict / words

За по-дълги редове е по-полезно да се използва различна конструкция: 'ˆ.\ номер \ $ ', където числото е броят на редовете, които трябва да съвпадат. Използвайте ',' за да зададете диапазон от числа.

За да изведете всички редове в '/ usr / dict / words', които са с ширина точно дванадесет знака, въведете:

$ grep 'ˆ.\ 12 \ $ '/ usr / dict / words

За да изведете всички редове в '/ usr / dict / words', които са двадесет и два или повече знака, въведете:

$ grep 'ˆ.\ 22, \ $ '/ usr / dict / words

Пример 7: Съвпадащи линии, които съдържат някой от някои регулярни изрази

За да съответствате на редове, които съдържат някой от редица регулярни изрази, посочете всеки от регулярните изрази, които да търсите между операторите на редуване ('\ |') като регулярния израз за търсене на. Ще бъдат изведени редове, съдържащи някой от дадените регулярни изрази.

За да изведете всички редове в „плейбой“, който съдържа или шаблоните „книгата“ или „тортата“, напишете:

$ grep 'the book \ | cake' playboy

Пример 8: Съвпадащи линии, които съдържат всички някои регулярни изрази

За извеждане на редове, които съвпадат всичко на редица регулярни изрази, използвайте grep за извеждане на редове, съдържащи първия регексп, който искате да съчетаете, и пренасочете изхода към grep с втория регексп като аргумент. Продължете да добавяте канали за греп търсене на всички регулярни изрази, които искате да търсите.

За да изведете всички редове в „плейлист“, който съдържа и двата модела „брега“ и „небето“, независимо от случая, напишете:

$ grep -i 'the shore' плейлист | grep -i небе

Пример 9: Съвпадащи линии, които съдържат само определени знаци

За да съчетаете редове, които съдържат само определени символи, използвайте регулярния израз „ˆ [символи] * $“, където символите са тези, които трябва да съвпадат.  За да изведете редове в '/ usr / dict / words', които съдържат само гласни, напишете:

$ grep -i 'ˆ [aeiou] * $' / usr / dict / words

Опцията '-i' съвпада с символи, независимо от регистъра; така че в този пример всички гласни символи се съвпадат, независимо от регистъра.

Пример 10: Намиране на фрази независимо от разстоянието

Един от начините за търсене на фраза, която може да възникне с допълнителни интервали между думите или през прекъсване на ред или страница, е да премахнете всички подавания на редове и допълнителни интервали от входа и след това да грепвате, че. За да направите това, поставете входа към tr с "\ r \ n: \> \ | -" като аргумент на опцията '-d' (премахване на всички прекъсвания на редове от входа); прекарайте това към fmt филтъра с опцията '-u' (извеждане на текста с равномерно разстояние); и тръба, която да grep с модела за търсене.

За да търсите в прекъсванията на редове за низа „едновременно с„ във файла „docs“, въведете:

$ котка документи | tr -d '\ r \ n: \> \ |
-'| fmt -u | grep "едновременно с"

Обобщение

В тази статия разгледахме 10 практически примера за използване на командата Grep Linux за търсене и намиране на низове в текстов файл. По пътя научихме как да използваме регулярни изрази заедно с Grep за извършване на сложни търсения в текстови файлове. Вече имате по-добра представа за това колко мощни са функциите за търсене на Linux.

Ето допълнителни ресурси за тези, които се интересуват да научат повече за програмирането на Linux:

Ресурси за системни администратори

Ресурси за програмисти на ядро ​​на Linux

Речник на файловата система на Linux

Изчерпателен преглед на това как работи Linux системата за файлове и директории

Средният бутон на мишката не работи в Windows 10
The среден бутон на мишката ви помага да превъртате дълги уеб страници и екрани с много данни. Ако това спре, добре ще свършите да използвате клавиату...
Как да промените левия и десния бутон на мишката на компютър с Windows 10
Напълно нормално е всички устройства на компютърни мишки да са ергономично проектирани за десничари. Но има налични устройства за мишка, които са спец...
Емулирайте кликванията на мишката, като задържите курсора на мишката с кликаща мишка в Windows 10
Използването на мишка или клавиатура в неправилна поза при прекомерна употреба може да доведе до много здравословни проблеми, включително напрежение, ...