Када покрећемо одређене команде у Уник/Линук -у за читање или уређивање текста из низа или датотеке, најчешће покушавамо да филтрирамо излаз у дати одељак који нас занима. Овде је употреба регуларних израза корисна.
Прочитајте такође:10 корисних оператора за повезивање Линука са практичним примерима
Регуларни израз се може дефинисати као низови који представљају неколико низова знакова. Једна од најважнијих ствари у вези са регуларним изразима је та што вам омогућавају да филтрирате излаз наредбе или датотеке, уредите одељак текста или конфигурацијску датотеку итд.
Регуларни изрази се састоје од:
(.)
одговара било ком појединачном знаку осим новог реда.(*)
подудара се са нулом или више постојања непосредног карактера који му претходи.[знакова]
подудара се са било којим од знакова наведених у знаковима, може се користити и цртица (-)
значи низ знакова као што су [а-ф]
, [1-5]
, и тако даље.^
одговара почетку линије у датотеци.$
одговара крају реда у датотеци.\
то је лик за бекство.Да бисте филтрирали текст, морате користити алат за филтрирање текста, као што је авк. Можете смислити авк као програмски језик за себе. Али за опсег овог водича за употребу авк, покрићемо га као једноставан алат за филтрирање командне линије.
Општа синтакса авка је:
# авк 'сцрипт' назив датотеке.
Где 'скрипта'
је скуп команди које разумеју авк и извршавају се у датотеци, назив датотеке.
Ради тако што чита дату линију у датотеци, прави копију линије и затим извршава скрипту на линији. Ово се понавља у свим редовима у датотеци.
Тхе 'скрипта'
је у облику '/ паттерн/ ацтион'
где шаблон је регуларни израз и поступак је оно што ће авк учинити када пронађе дати образац у линији.
У следећим примерима фокусираћемо се на мета ликове о којима смо горе говорили под карактеристикама авка.
Пример испод штампа све редове у датотеци /etc/hosts пошто није дат образац.
# авк '//{принт} '/етц/хостс.
И доњи пример, образац локални домаћин
је дато, па ће авк одговарати линијском имању локални домаћин у /etc/hosts
филе.
# авк '/localhost/{принт} ' /етц /хостс
Тхе (.)
ће се подударати са низовима који садрже лоц, локални домаћин, лоцалнет у доњем примеру.
Односно * л соме_сингле_цхарацтер ц *.
# авк '/l.c/{принт} ' /етц /хостс.
Он ће се подударати са низовима који садрже локални домаћин, лоцалнет, линије, способан, као у доњем примеру:
# авк '/l*c/{принт} ' /етц /лоцалхост.
Схватићете и то (*)
покушава да вам обезбеди најдуже могуће подударање које може открити.
Погледајмо случај који то показује, узмимо регуларни израз т*т
што значи низови подударања који почињу словом т
и завршити са т
у доњем реду:
ово је тецминт, где добијате најбоље добре водиче, упутства, водиче, тецминт.
Када користите образац, добићете следеће могућности /t*t/
:
ово је т. ово је тецминт. ово је тецминт, где добијате т. ово је тецминт, где добијате најбоље добре т. ово је тецминт, где добијате најбоље добре водиче, како т. ово је тецминт, где добијате најбоље добре водиче, како тос, водиче, т. ово је тецминт, где добијате најбоље добре водиче, како тос, водиче, тецминт.
И (*)
у /t*t/
џокер знак дозвољава авку да изабере последњу опцију:
ово је тецминт, где добијате најбоље добре водиче, упутства, водиче, тецминт.
Узмимо за пример сет [ал1]
, овде ће авк одговарати свим низовима који садрже знак а
или л
или 1
у реду у датотеци /etc/hosts.
# авк '/[al1]/{принт} ' /етц /хостс.
Следећи пример одговара низовима који почињу са било којим К
или к
затим Т
:
# авк '/[Kk]T/{принт} ' /етц /хостс
Схватите ликове са авк -ом:
[0-9]
значи један број[а-з]
значи подударање са једним малим словом[А-З]
значи подударање са једним великим словом[а-зА-З]
значи подударање са једним словом[а-зА-З 0-9]
значи подударање са једним словом или бројемПогледајмо пример испод:
# авк '/[0-9]/{принт} ' /етц /хостс
Сав ред из датотеке /etc/hosts садрже најмање један број [0-9]
у горњем примеру.
Подудара се са свим линијама које почињу датим узорком као у доњем примеру:
# авк '/^fe/{принт} ' /етц /хостс. # авк '/^ff/{принт} ' /етц /хостс.
Подудара се са свим линијама које завршавају понуђеним узорком:
# авк '/ab$/{принт} ' /етц /хостс. # авк '/ost$/{принт} ' /етц /хостс. # авк '/rs$/{принт} ' /етц /хостс.
Омогућава вам да узмете знак који га прати као дословну, што значи да га сматрате таквим какав јесте.
У доњем примеру прва команда штампа све редове у датотеци, друга команда не штампа ништа јер желим да се подудара са линијом која има $25.00, али се не користи знак за бекство.
Трећа команда је тачна јер је за читање коришћен есцапе знак $ као што је.
# авк '//{принт} 'офферс.ткт. # авк '/$25.00/{принт} 'офферс.ткт. # авк '/\$25.00/{принт} 'офферс.ткт.
То није све са авк алатка за филтрирање командне линије, горњи примери а основне операције авка. У следећим деловима ћемо напредовати у коришћењу сложених карактеристика авка. Хвала вам на читању и на било каквим додацима или појашњењима, поставите коментар у одељку за коментаре.