GREP ба тогтмол хэллэгийн талаархи боловсролын хөтөлбөр. Линукс дээр ердийн илэрхийлэл (regex) ашиглах нь grep тогтмол илэрхийллийн хүснэгт

grep хэрэгсэл нь хайлтын болон шүүлтүүрийн маш хүчирхэг хэрэгсэл юм. текст мэдээлэл. Энэ нийтлэлд түүний ашиглалтын хэд хэдэн жишээг харуулсан бөгөөд энэ нь түүний чадварыг үнэлэх боломжийг танд олгоно.
grep-ийн гол хэрэглээ нь файлууд болон гаралтын урсгалуудаас үг, хэллэг хайх явдал юм. Та командын мөрөнд асуулга болон хайлтын талбарыг (файл) бичиж хайлт хийж болно.
Жишээлбэл, hystack.txt файлаас "зүү" мөрийг олохын тулд дараах тушаалыг ашиглана уу.

$ grep зүү haystack.txt

Үүний үр дүнд grep нь haystack.txt файлын агуулгад тааралдсан зүү бүхий бүх тохиолдлыг харуулах болно. Энэ тохиолдолд grep нь үг биш харин тэмдэгтийн багц хайж байгааг анхаарах нь чухал. Жишээлбэл, "шаардлагагүй" гэсэн үг болон "зүү" гэсэн дарааллыг агуулсан бусад үгсийг агуулсан мөрүүд гарч ирнэ.


grep-д тодорхой үг хайж байгаагаа хэлэхийн тулд -w шилжүүлэгчийг ашиглана уу. Энэ түлхүүр нь хайлтыг зөвхөн заасан үгээр хязгаарлана. Үг гэдэг нь аль аль талдаа хоосон зай, цэг таслал, мөрийн завсараар тусгаарлагдсан асуулга юм.

$ grep -w зүү haystack.txt

Хайлтыг зөвхөн нэг файлаар хязгаарлах шаардлагагүй; grep нь бүлэг файлуудаар хайлт хийх боломжтой бөгөөд хайлтын үр дүнд тохирох файл олдсон файлыг зааж өгнө. -n шилжүүлэгч нь тохирохыг олсон мөрийн дугаарыг нэмэх ба -r шилжүүлэгч нь рекурсив хайлт хийх боломжийг олгоно. Энэ нь програмын эх код бүхий файлуудыг хайхад маш тохиромжтой.

$ grep -rnw функцийн нэр /home/www/dev/myprogram/

Файлын нэрийг тохирох бүрийн өмнө жагсаах болно. Хэрэв та файлын нэрийг нуух шаардлагатай бол -h шилжүүлэгчийг ашиглана уу, эсрэгээр танд зөвхөн файлын нэр хэрэгтэй бол -l шилжүүлэгчийг зааж өгнө үү.
Дараах жишээн дээр бид IRC бүртгэлийн файлаас URL хайж, сүүлийн 10 тохирлыг харуулах болно.

$ grep -wo http://.* channel.log | сүүл

-o сонголт нь grep-д мөрийг бүхэлд нь хэвлэхээс илүү зөвхөн хээний тохирлыг хэвлэхийг хэлдэг. Хоолойг ашиглан бид grep-ийн гаралтыг tail команд руу дахин чиглүүлдэг бөгөөд энэ нь анхдагчаар сүүлийн 10 мөрийг гаргадаг.
Одоо бид тодорхой хэрэглэгчдийн irc суваг руу илгээсэн мессежийн тоог тоолох болно. Жишээлбэл, миний гэр, ажлаасаа илгээсэн бүх мессеж. Тэд хочоороо ялгаатай, би гэртээ хэрэглэгч_гэртээ, ажил дээрээ хэрэглэгч_ажилдаа гэсэн хоч ашигладаг.

$ grep -c "^user_at_(гэр|ажил)" channel.log

-c сонголттой бол grep нь зөвхөн таарсан тохирох тоог хэвлэдэг болохоос тохирохыг нь биш. Хайлтын мөр нь хянагч тэмдэгт гэж бүрхүүлээр танигдах тусгай тэмдэгтүүдийг агуулж байгаа тул хашилтанд оруулсан болно. Хайлтын загварт хашилт ороогүй болохыг анхаарна уу. Урвуу зураас "" нь тусгай тэмдэгтүүдээс зайлсхийхэд ашиглагддаг.
Суваг дээр "хашгирах" дуртай хүмүүсийн мессежийг хайцгаая. "Хашгирах" гэж бид шаргал өнгөтэй, бүх ТОМ үсгээр бичсэн мессежийг хэлж байна. Товчлолын санамсаргүй хайлтыг хайлтаас хасахын тулд бид тав буюу түүнээс дээш тэмдэгттэй үгсийг хайх болно.

$ grep -w "+(5,)" channel.log

Илүү дэлгэрэнгүй тайлбарыг та grep man хуудаснаас харж болно.
Өөр хэдэн жишээ:

# grep root /etc/passwd root:x:0:0:root:/root:/bin/bash оператор:x:11:0:operator:/root:/sbin/nologin

/etc/passwd файлаас мөрийн үндэс агуулсан мөрүүдийг харуулна.

# grep -n root /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 12:operator:x:11:0:operator:/root:/sbin/nologin

Үүнээс гадна хайсан мөрийг агуулсан мөрийн дугаарууд харагдана.

# grep -v bash /etc/passwd | grep -v nologin sync:x:5:0:syc:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown stop:x:7:0:halt:/sbin :/sbin/halt news:x:9:13:news:/var/spool/news: mailnull:x:47:47::/var/spool/mqueue:/dev/null xfs:x:43:43: X Font Server:/etc/X11/fs:/bin/false rpc:x:32:32:Portmapper RPC хэрэглэгч:/:/bin/false nscd:x:28:28:NSCD Демон:/:/bin/false нэртэй:x:25:25:Нэрлэсэн:/var/named:/bin/false squid:x:23:23::/var/spool/squid:/dev/null ldap:x:55:55:LDAP Хэрэглэгч: /var/lib/ldap:/bin/false apache:x:48:48:Apache:/var/www:/bin/false

Бүрхүүл гэж заасан нэвтрээгүй хэрэглэгчийн бүртгэлээс бусад хэрэглэгчид bash ашигладаггүйг шалгана.

# grep -c худал /etc/passwd 7

Бүрхүүлдээ /bin/false байгаа дансны тоог тоолно.

# grep -i тоглоомууд ~/.bash* | grep -v түүх

Энэ тушаал нь гэрийн директор дахь бүх файлын мөрүүдийг харуулдаг одоогийн хэрэглэгч, дээд эсвэл жижиг үсгээр ижил мөртэй байж болох ~/.bash_history файлаас олдсон тохирохыг оруулахгүйн тулд нэр нь мөрийн түүхийг агуулсан файлуудаас бусад нь ~/.bash-аар эхэлдэг. "Тоглоом" гэсэн үгийг хайж байгаа тул та оронд нь өөр ямар ч үгийг орлуулж болно гэдгийг анхаарна уу.
grep тушаал болон тогтмол илэрхийллүүд

Өмнөх жишээнээс ялгаатай нь бид одоо зөвхөн "root" гэсэн мөрөөр эхэлсэн мөрүүдийг харуулах болно:

# grep ^root /etc/passwd root:x:0:0:root:/root:/bin/bash

Хэрэв бид ямар бүртгэлүүд бүрхүүлийг огт ашиглаагүйг харахыг хүсвэл ":" тэмдэгтээр төгссөн мөрүүдийг хайна:

# grep:$ /etc/passwd news:x:9:13:news:/var/spool/news:

Таны ~/.bashrc файл дахь PATH хувьсагч экспортлогдсон эсэхийг шалгахын тулд эхлээд "экспорт"-той мөрүүдийг сонгоод дараа нь "PATH" мөрөөр эхэлсэн мөрүүдийг хайж олох; энэ тохиолдолд MANPATH болон бусад нь харагдахгүй боломжит арга замууд:

# grep экспорт ~/.bashrc | grep "PATH" экспортын PATH="/bin:/usr/lib/mh:/lib:/usr/bin:/usr/local/bin:/usr/ucb:/usr/dbin:$PATH"

Дүрийн ангиуд

Дөрвөлжин хаалт доторх илэрхийлэл нь [" ба "]"" тэмдэгтүүдийн дотор орсон тэмдэгтүүдийн жагсаалт юм. Энэ жагсаалтад заасан ямар ч тэмдэгттэй таарч байна; хэрэв жагсаалтын эхний тэмдэгт нь "^" бол жагсаалтад БАЙХГҮЙ тэмдэгттэй таарч байна. Жишээлбэл, "" тогтмол илэрхийлэл нь ямар ч оронтой тоотой таарч байна.

Дөрвөлжин хаалт доторх илэрхийлэл дотор та зураасаар тусгаарлагдсан хоёр тэмдэгтээс бүрдэх мужийг зааж өгч болно. Дараа нь илэрхийлэл нь ангилах дүрмийн дагуу эдгээр хоёр тэмдэгт, түүний дотор эдгээр хоёр тэмдэгт дотор багтах дурын синглтонтой таарч байна; Энэ нь тухайн хэл дээр заасан тэмдэгтийн багцыг харгалзах болно. Жишээлбэл, өгөгдмөл хэл нь C байх үед "" илэрхийлэл нь "" илэрхийлэлтэй тэнцүү байна. Толь бичгийн дарааллаар эрэмбэлэх олон орон нутаг байдаг бөгөөд эдгээр хэлэнд "" нь ерөнхийдөө ""-тэй тэнцэхгүй, жишээ нь "" гэсэн илэрхийлэлтэй тэнцүү байж болно. Хаалттай илэрхийллийн уламжлалт тайлбарыг ашиглахын тулд LC_ALL орчны хувьсагчийг "C" болгож тохируулснаар C хэлийг ашиглаж болно.

Эцэст нь дөрвөлжин хаалтанд илэрхийлэл дотор заасан тэмдэгтүүдийн тусгайлан нэрлэгдсэн ангиуд байдаг. Нэмэлт мэдээлэлЭдгээр урьдчилан тодорхойлсон илэрхийллүүдийн талаарх мэдээллийг man pages эсвэл grep командын баримтаас үзнэ үү.

# grep /etc/group sys:x:3:root,bin,adm tty:x:5: mail:x:12:mail,postfix ftp:x:50: хэн ч:x:99: уян диск:x:19: xfs:x:43: nfsnobody:x:65534: postfix:x:89:

Жишээ нь "y" эсвэл "f" тэмдэгт агуулсан бүх мөрийг харуулав.
Бүх нийтийн дүрүүд (мета дүрүүд)

"."-г ашиглана уу. дурын нэг дүрд тааруулах. Хэрэв та "c"-ээс эхлээд "h"-ээр төгссөн таван тэмдэгтээс бүрдсэн бүх англи үгсийн жагсаалтыг толь бичгээс авахыг хүсвэл (кроссворд таавар шийдвэрлэхэд хэрэгтэй):

# grep " " /usr/share/dict/words catch clash cloth coach буйдан ханиалгах ослын бутлах

Хэрэв та цэг тэмдэгт агуулсан мөрүүдийг шууд утгаар харуулахыг хүсвэл grep командын -F сонголтыг зааж өгнө үү. Тэмдгүүд "< " и «>" гэдэг нь заасан үсгүүдийн өмнө болон дараа нь хоосон мөр байгааг хэлнэ. Энэ нь үгийн файл дахь үгсийг зохих ёсоор бичих ёстой гэсэн үг юм. Хэрэв та хоосон мөрүүдийг харгалзахгүйгээр текст дэх бүх үгсийг заасан хэв маягийн дагуу олохыг хүсвэл тэмдэгтүүдийг орхи.< " и «>", зөвхөн үгсийг илүү нарийвчлалтай хайхын тулд -w шилжүүлэгчийг ашиглана уу.

Үүнтэй адилаар "c" ба "h" хоёрын хооронд хэдэн ч тэмдэгт байж болох үгсийг олохын тулд од (*) ашиглана уу. Доорх жишээнд системийн толь бичгээс "c"-ээр эхэлж, "h"-ээр төгссөн бүх үгийг сонгов.

# grep " " /usr/share/dict/words caliph cash catch cheesecloth cheetah --гаралтыг орхигдуулсан--

Хэрэв та файл эсвэл гаралтын урсгалаас шууд одны тэмдэгт олохыг хүсвэл ашиглана уу ганц ишлэл. Доорх жишээн дээрх хэрэглэгч эхлээд хашилт ашиглахгүйгээр /etc/profile файлаас "од"-ыг хайхыг оролдсон бөгөөд үр дүнд нь юу ч олдсонгүй. Ишлэлийг ашиглах үед үр дүн гарна:

# grep * /etc/profile # grep "*" /etc/profile for i in /etc/profile.d/*.sh ; хийх

sed болон awk ашиглан bash скрипт дэх текстийг бүрэн боловсруулахын тулд та ердийн хэллэгийг ойлгох хэрэгтэй. Энэхүү хамгийн хэрэгтэй хэрэгслийн хэрэгжилтийг хаанаас ч олж болох бөгөөд бүх тогтмол хэллэгүүд ижил төстэй бүтэцтэй, ижил санаан дээр суурилдаг боловч өөр өөр орчинд тэдэнтэй ажиллах нь тодорхой онцлог шинж чанартай байдаг. Энд бид скрипт дээр ашиглахад тохиромжтой тогтмол хэллэгүүдийн талаар ярих болно тушаалын мөрЛинукс.

Энэ материал нь ердийн хэллэгүүдийн танилцуулга хэлбэрээр зориулагдсан бөгөөд тэдгээр нь юу болохыг огт мэдэхгүй хүмүүст зориулагдсан болно. Тиймээс эхнээс нь эхэлцгээе.

Тогтмол илэрхийлэл гэж юу вэ

Олон хүмүүс байнгын хэллэгийг анх хараад шууд л утгагүй эргэлзсэн дүрүүдийг харж байна гэж боддог. Гэхдээ энэ нь мэдээжийн хэрэг үүнээс хол байна. Жишээ нь энэ регексийг харна уу


Бидний бодлоор анхлан суралцагч ч гэсэн энэ нь хэрхэн ажилладаг, яагаад хэрэгтэй байгааг шууд ойлгох болно :) Хэрэв та үүнийг сайн ойлгохгүй байгаа бол зүгээр л уншаад бүх зүйл байрандаа орох болно.
Тогтмол илэрхийлэл нь sed эсвэл awk зэрэг программууд текстийг шүүдэг загвар юм. Загварууд нь өөрсдийгөө төлөөлдөг ердийн ASCII тэмдэгтүүд ба тусгай үүрэг гүйцэтгэдэг мета тэмдэгтүүдийг ашигладаг, жишээлбэл, тодорхой бүлэг тэмдэгтүүдийг лавлах боломжийг олгодог.

Тогтмол илэрхийллийн төрлүүд

Java, Perl, Python зэрэг програмчлалын хэл, sed, awk, grep зэрэг Линуксийн хэрэгслүүдэд ердийн илэрхийлэлүүдийг өөр өөр орчинд хэрэгжүүлэх нь тодорхой онцлог шинж чанартай байдаг. Эдгээр функцууд нь хэв маягийг тайлбарладаг ердийн илэрхийлэл гэж нэрлэгддэг хөдөлгүүрүүдээс хамаардаг.
Линукс нь ердийн илэрхийлэлийн хоёр хөдөлгүүртэй:
  • POSIX Basic Regular Expression (BRE) стандартыг дэмждэг хөдөлгүүр.
  • POSIX Extended Regular Expression (ERE) стандартыг дэмждэг хөдөлгүүр.
Ихэнх Линуксийн хэрэгслүүд нь дор хаяж POSIX BRE стандарттай нийцдэг боловч зарим хэрэгслүүд (sed-г оруулаад) BRE стандартын зөвхөн нэг хэсгийг л ойлгодог. Энэхүү хязгаарлалтын нэг шалтгаан нь текст боловсруулахад ийм хэрэгслийг аль болох хурдан болгох хүсэл юм.

POSIX ERE стандартыг ихэвчлэн програмчлалын хэл дээр хэрэгжүүлдэг. Энэ нь танд ашиглах боломжийг олгодог их хэмжээнийтогтмол илэрхийлэл боловсруулах хэрэгсэл. Жишээлбэл, эдгээр нь текст доторх бие даасан үг эсвэл тооны багц хайх гэх мэт байнга хэрэглэгддэг хэв маягийн тэмдэгтүүдийн тусгай дараалал байж болно. Awk нь ERE стандартыг дэмждэг.

Тогтмол хэллэгийг хөгжүүлэх олон арга байдаг бөгөөд энэ нь програмистын санал бодол, тэдгээрийг бий болгосон хөдөлгүүрийн онцлогоос хамаарна. Аливаа хөдөлгүүрт ойлгогдохуйц нийтлэг хэллэгүүдийг бичих амаргүй. Тиймээс бид хамгийн түгээмэл хэрэглэгддэг тогтмол хэллэгүүд дээр анхаарлаа төвлөрүүлж, sed болон awk-д хэрэгжүүлэх онцлогуудыг авч үзэх болно.

POSIX BRE тогтмол илэрхийллүүд

Магадгүй хамгийн энгийн BRE загвар нь текст дэх тэмдэгтүүдийн дарааллыг яг таг хайхад зориулагдсан ердийн илэрхийлэл юм. sed болон awk-д мөр хайх нь иймэрхүү харагдаж байна:

$ echo "Энэ бол шалгалт" | sed -n "/test/p" $ echo "Энэ бол шалгалт" | awk "/test/($0 хэвлэх)"

sed хэл дээрх хээгээр текст хайж байна


awk дээр хэв маягаар текст хайж байна

Өгөгдсөн хэв маягийн хайлт нь мөрөнд байгаа текстийн яг байршлыг харгалзахгүйгээр хийгддэг болохыг та анзаарч магадгүй юм. Үүнээс гадна, тохиолдлын тоо хамаагүй. Тогтмол илэрхийллийн дараа олдог өгөгдсөн текстшугамын аль ч хэсэгт шугамыг тохиромжтой гэж үзэн цаашдын боловсруулалтанд шилжүүлнэ.

Тогтмол хэллэгүүдтэй ажиллахдаа тэдгээр нь том жижиг үсгийн мэдрэмжтэй байдаг гэдгийг анхаарах хэрэгтэй.

$ echo "Энэ бол шалгалт" | awk "/Тест/($0 хэвлэх)" $ echo "Энэ бол туршилт" | awk "/test/($0 хэвлэх)"

Тогтмол илэрхийллүүд нь том жижиг үсгийг харгалздаг

Текстэнд том үсгээр эхэлсэн "тест" гэсэн үг байхгүй тул эхний тогтмол хэллэгт тохирох үг олдсонгүй. Хоёр дахь нь том үсгээр бичсэн үгийг хайхаар тохируулагдсан бөгөөд урсгалаас тохирох мөрийг олжээ.

Тогтмол илэрхийлэлд та зөвхөн үсэг төдийгүй хоосон зай, тоо ашиглаж болно.

$ echo "Энэ бол дахин шалгалт 2" | awk "/test 2/(0$ хэвлэх)"

Хоосон зай, тоо агуулсан текстийн хэсгийг олох

Орон зайг ердийн илэрхийллийн хөдөлгүүрээр ердийн тэмдэгт гэж үздэг.

Тусгай тэмдэг

Ашиглаж байна янз бүрийн дүрүүдТогтмол илэрхийлэлд та зарим онцлог шинж чанаруудыг анхаарч үзэх хэрэгтэй. Тиймээс загварт ашиглах нь тусгай арга барил шаарддаг зарим тусгай тэмдэгтүүд эсвэл мета тэмдэгтүүд байдаг. Тэд энд байна:

.*^${}\+?|()
Загварт тэдгээрийн аль нэг нь шаардлагатай бол ташуу зураас (урвуу ташуу) - \ ашиглан зугтах шаардлагатай.

Жишээлбэл, хэрэв та текстээс долларын тэмдгийг олох шаардлагатай бол түүнийг загварт оруулах хэрэгтэй бөгөөд үүний өмнө зугтах тэмдэгт оруулах хэрэгтэй. Дараах тексттэй myfile файл байна гэж бодъё.

Миний халаасанд 10 доллар байгаа
Долларын тэмдгийг дараах загварыг ашиглан илрүүлж болно.

$awk "/\$/($0 хэвлэх)" миний файл

Загварт тусгай тэмдэгт ашиглах

Нэмж дурдахад, урвуу зураас нь мөн тусгай тэмдэгт тул хэрэв та үүнийг хэв маягт ашиглах шаардлагатай бол энэ нь бас зугтах шаардлагатай болно. Энэ нь бие биенээ дагаж байгаа хоёр налуу зураас шиг харагдаж байна:

$ echo "\ бол тусгай тэмдэгт" | awk "/\\/($0 хэвлэх)"

Урвуу налуу зурааснаас зугтаж байна

Хэдийгээр налуу зураас нь дээрх тусгай тэмдэгтүүдийн жагсаалтад ороогүй ч sed эсвэл awk-д зориулж бичсэн ердийн илэрхийлэлд үүнийг ашиглахыг оролдвол алдаа гарах болно:

$ echo "3/2" | awk "///($0 хэвлэх)"

Загварт налуу зураасыг буруу ашигласан

Хэрэв шаардлагатай бол үүнээс зайлсхийх хэрэгтэй:

$ echo "3/2" | awk "/\//($0 хэвлэх)"

Урд зурааснаас зугтаж байна

Зангууны тэмдэг

Загварыг текстийн мөрийн эхлэл эсвэл төгсгөлд холбох хоёр тусгай тэмдэгт байдаг. Cap тэмдэгт - ^ нь текстийн мөрийн эхэнд байгаа тэмдэгтүүдийн дарааллыг дүрслэх боломжийг танд олгоно. Хэрэв таны хайж буй загвар мөрийн өөр газар байгаа бол ердийн илэрхийлэл үүнд хариу өгөхгүй. Энэ тэмдгийг ашиглах нь дараах байдалтай байна.

$ echo "likegeeks вэбсайтад тавтай морил" | awk "/^likegeeks/($0 хэвлэх)" $ echo "likegeeks вэбсайт" | awk "/^likegeeks/($0 хэвлэх)"

Мөрний эхэнд байгаа хэв маягийг олох

^ тэмдэгт нь мөрийн эхэнд хэв маяг хайхад зориулагдсан бөгөөд тэмдэгтүүдийн тохиолдлыг мөн харгалзан үздэг. Энэ нь текст файлыг боловсруулахад хэрхэн нөлөөлж байгааг харцгаая:

$awk "/^this/($0 хэвлэх)" миний файл


Файлаас текстийн мөрийн эхэнд хэв маягийг олох

Хэрэв та sed-г ашиглахдаа хээн дотор хаа нэгтээ таг хийвэл энэ нь бусад ердийн тэмдэгттэй адил харагдана:

$ echo "Энэ ^ тест" | sed -n "/s ^/p"

Сэд дэх хээний эхэнд таг биш

awk-д ижил загварыг ашиглах үед энэ тэмдэгтээс зайлсхийх ёстой:

$ echo "Энэ ^ тест" | awk "/s\^/($0 хэвлэх)"

Загварын эхэнд awk дээр таглаагүй

Бид мөрийн эхэнд байрлах текстийн хэсгүүдийг хайж олохыг олж мэдсэн. Хэрэв та мөрийн төгсгөлд ямар нэгэн зүйлийг олох шаардлагатай бол яах вэ?

Долларын тэмдэг - $ нь шугамын төгсгөлийн зангуу тэмдэгт нь бидэнд энэ талаар тусална.

$ echo "Энэ бол шалгалт" | awk "/test$/($0 хэвлэх)"

Мөрийн төгсгөлд байгаа текстийг хайж байна

Та хоёр зангуу тэмдгийг нэг загварт ашиглаж болно. Доорх зурагт агуулгыг харуулсан myfile файлыг дараах ердийн илэрхийлэл ашиглан боловсруулцгаая.

$ awk "/^энэ бол тест$/($0 хэвлэх)" миний файл


Мөрийг эхлүүлэх, дуусгахад тусгай тэмдэгт ашигладаг загвар

Таны харж байгаагаар загвар нь өгөгдсөн тэмдэгтүүдийн дараалал, тэдгээрийн байршилд бүрэн нийцсэн мөрөнд л хариу өгсөн.

Зангуу тэмдэгтүүдийг ашиглан хоосон мөрүүдийг хэрхэн шүүхийг эндээс үзнэ үү.

$awk "!/^$/($0 хэвлэх)" миний файл
Энэ загварт би үгүйсгэх тэмдэг, анхаарлын тэмдэг ашигласан - ! . Энэ загварыг ашигласнаар мөрийн эхэн ба төгсгөлийн хооронд юу ч агуулаагүй мөрүүдийг хайдаг ба баярлалаа анхаарлын тэмдэгЗөвхөн энэ загварт тохирохгүй мөрүүдийг хэвлэнэ.

Цэг тэмдэг

Цэг нь шинэ мөрийн тэмдэгтээс бусад ганц тэмдэгттэй таарахад ашиглагддаг. Агуулга нь доор өгөгдсөн энэхүү ердийн илэрхийлэл рүү myfile файлыг дамжуулцгаая.

$awk "/.st/($0 хэвлэх)" миний файл


Тогтмол хэллэгт цэг ашиглах

Гаралтын өгөгдлөөс харахад файлын зөвхөн эхний хоёр мөр нь хэв маягтай тохирч байна, учир нь тэдгээр нь өөр тэмдэгтийн өмнө "st" тэмдэгтүүдийн дарааллыг агуулдаг бол гурав дахь мөрөнд тохирох дараалал агуулаагүй бөгөөд Дөрөвдүгээрт байгаа боловч мөрийн эхэнд байна.

Дүрийн ангиуд

Цэг нь ямар ч тэмдэгттэй таарч байна, гэхдээ та хайж буй тэмдэгтийнхээ багцыг хязгаарлахад илүү уян хатан байхыг хүсвэл яах вэ? Энэ тохиолдолд та дүрийн ангиудыг ашиглаж болно.

Энэхүү аргын ачаар та өгөгдсөн багцаас дурын дүрийг хайх ажлыг зохион байгуулж болно. Тэмдэгтийн ангиллыг тодорхойлохын тулд дөрвөлжин хаалт ашиглана:

$awk "/th/($0 хэвлэх)" миний файл


Тогтмол илэрхийлэл дэх тэмдэгтийн ангийн тодорхойлолт

Энд бид "o" тэмдэгт эсвэл "i" тэмдэгтийн өмнөх "th" тэмдэгтүүдийн дарааллыг хайж байна.

Ангиуд нь том эсвэл жижиг үсгээр эхэлж болох үгсийг хайхад хэрэг болно.

$ echo "энэ бол шалгалт" | awk "/энэ бол тест/($0 хэвлэх)" $ echo "Энэ бол шалгалт" | awk "/энэ бол туршилт/(0$ хэвлэх)"

Жижиг эсвэл том үсгээр эхэлж болох үгсийг хайх

Тэмдэгтийн ангиуд зөвхөн үсгээр хязгаарлагдахгүй. Энд бусад тэмдэглэгээг ашиглаж болно. Ямар нөхцөлд ангиуд хэрэгтэй болохыг урьдчилан хэлэх боломжгүй - энэ бүхэн шийдэгдэж буй асуудлаас хамаарна.

Тэмдэгтийн ангиудыг үгүйсгэх

Дээр дурдсан урвуу асуудлыг шийдвэрлэхийн тулд тэмдэгтийн ангиллыг бас ашиглаж болно. Тухайлбал, та ангид орсон тэмдэгтүүдийг хайхын оронд ангид ороогүй бүх зүйлийг хайх ажлыг зохион байгуулж болно. Энэхүү тогтмол илэрхийлэлд хүрэхийн тулд та ангийн тэмдэгтүүдийн жагсаалтын өмнө ^ тэмдэг тавих хэрэгтэй. Энэ нь дараах байдалтай харагдаж байна.

$ awk "/[^oi]th/($0 хэвлэх)" миний файл


Ангид байхгүй дүрүүдийг хайж байна

Энэ тохиолдолд өмнө нь "o" ч, "i" ч байхгүй "th" тэмдэгтүүдийн дарааллыг олох болно.

Тэмдэгтийн хүрээ

Тэмдэгтийн ангиудад та зураас ашиглан тэмдэгтүүдийн хүрээг тодорхойлж болно:

$awk "/st/($0 хэвлэх)" миний файл


Тэмдэгтийн анги дахь олон тооны тэмдэгтүүдийн тодорхойлолт

IN энэ жишээндтогтмол илэрхийлэл нь ямар ч тэмдэгтийн өмнө байгаа "st" тэмдэгтүүдийн дарааллаар хариу үйлдэл үзүүлдэг цагаан толгойн дараалал, "e" ба "p" тэмдэгтүүдийн хооронд.

Мөн тооноос муж үүсгэж болно:

$ echo "123" | awk "//" $ echo "12a" | awk "//"

Дурын гурван тоог олох энгийн илэрхийлэл

Тэмдэгтийн ангилал нь хэд хэдэн мужийг агуулж болно:

$awk "/st/($0 хэвлэх)" миний файл


Хэд хэдэн мужаас бүрдэх тэмдэгтийн анги

Энэ тогтмол илэрхийлэл нь "st"-ийн өмнөх тэмдэгтүүдийн бүх дарааллыг олох болно a-f мужуудболон m-z.

Тусгай дүрийн ангиуд

BRE нь ердийн илэрхийлэл бичихдээ ашиглаж болох тусгай тэмдэгтийн ангиудтай:
  • [[:alpha:]] - том эсвэл жижиг үсгээр бичсэн цагаан толгойн үсэгтэй тохирно.
  • [[:alnum:]] - 0-9 , A-Z , a-z муж дахь тэмдэгтүүд болох дурын үсэг тоон тэмдэгттэй тохирно.
  • [[:хоосон:]] - хоосон зай болон табын тэмдэгттэй тохирно.
  • [[:цифр:]] - 0-ээс 9 хүртэлх тоон тэмдэгт.
  • [[:дээд:]] - том цагаан толгойн үсэг - A-Z .
  • [[:доод:]] - жижиг цагаан толгойн тэмдэгтүүд - a-z .
  • [[:print:]] - ямар ч хэвлэх тэмдэгттэй таарч байна.
  • [[:punct:]] - цэг таслалтай тохирно.
  • [[:зай:]] - хоосон зайны тэмдэгтүүд, ялангуяа - зай, таб, тэмдэгтүүд NL, FF, VT, CR.
Та ийм загварт тусгай ангиудыг ашиглаж болно:

$ echo "abc" | awk "/[[:альфа:]]/($0 хэвлэх)" $ echo "abc" | awk "/[[:цифр:]]/($0 хэвлэх)" $ echo "abc123" | awk "/[[:цифр:]]/(0$ хэвлэх)"


Тогтмол илэрхийлэл дэх тусгай тэмдэгтийн ангиуд

Оддын тэмдэг

Хэрэв та хээн доторх тэмдэгтийн ард одоор тавьсан бол тэмдэгт тэмдэгт мөрөнд хэдэн ч удаа гарч ирвэл тогтмол илэрхийлэл ажиллах болно гэсэн үг юм.

$ echo "туршилт" | awk "/tes*t/($0 хэвлэх)" $ echo "tessst" | awk "/tes*t/($0 хэвлэх)"


Тогтмол илэрхийлэлд * тэмдэгт ашиглах

Энэ орлуулагч тэмдэгтийг ихэвчлэн байнга алдаатай бичдэг үгс эсвэл хамаарах үгсэд ашигладаг янз бүрийн хувилбаруудзөв бичих:

$ echo "Би ногоон өнгөнд дуртай" | awk "/colou*r/(хэвлэх $0)" $ echo "Би ногоон өнгөнд дуртай" | awk "/colou*r/($0 хэвлэх)"

Янз бүрийн үсэгтэй үгийг олох

Энэ жишээнд ижил тогтмол хэллэг нь "өнгө" болон "өнгө" гэсэн үгэнд хоёуланд нь хариу үйлдэл үзүүлдэг. Энэ нь "у" тэмдэгтийн ард одны тэмдэг байхгүй эсвэл хэд хэдэн удаа дараалан гарч ирдэгтэй холбоотой юм.

Од тэмдгийн өөр нэг ашигтай шинж чанар бол үүнийг цэгтэй хослуулах явдал юм. Энэ хослол нь ердийн илэрхийлэлд дурын тооны тэмдэгтүүдэд хариу өгөх боломжийг олгодог:

$ awk "/this.*test/($0 хэвлэх)" myfile


Ямар ч тооны тэмдэгтэд хариу үйлдэл үзүүлэх загвар

Энэ тохиолдолд "энэ" ба "туршилт" гэсэн үгсийн хооронд хэдэн, ямар тэмдэгт байх нь хамаагүй.

Мөн одыг тэмдэгтийн ангиудад ашиглаж болно:

$ echo "st" | awk "/s*t/($0 хэвлэх)" $ echo "sat" | awk "/s*t/(хэвлэх $0)" $ echo "set" | awk "/s*t/($0 хэвлэх)"


Тэмдэгтийн анги бүхий од ашиглах

Гурван жишээн дээр ердийн илэрхийлэл ажилладаг, учир нь тэмдэгтийн ангийн ард байгаа одоор нь "a" эсвэл "e" тэмдэгтүүдийн аль нэг нь олдсон эсвэл олдохгүй бол мөр нь өгөгдсөн загвартай тохирно гэсэн үг юм.

POSIX ERE тогтмол илэрхийллүүд

Зарим Linux хэрэгслүүдийг дэмждэг POSIX ERE загварууд нь нэмэлт тэмдэгт агуулж болно. Өмнө дурьдсанчлан awk энэ стандартыг дэмждэг боловч sed нь дэмждэггүй.

Энд бид ERE загварт хамгийн түгээмэл хэрэглэгддэг тэмдэгтүүдийг авч үзэх бөгөөд энэ нь танд өөрийн тогтмол илэрхийлэл үүсгэхэд хэрэг болно.

▍Асуултын тэмдэг

Асуултын тэмдэг нь өмнөх тэмдэгт нь текстэд нэг удаа гарч ирэх эсвэл огт харагдахгүй байгааг илтгэнэ. Энэ дүр нь давтагдах мета тэмдэгтүүдийн нэг юм. Энд зарим жишээ байна:

$ echo "tet" | awk "/tes?t/($0 хэвлэх)" $ echo "тест" | awk "/tes?t/($0 хэвлэх)" $ echo "test" | awk "/tes?t/($0 хэвлэх)"


Тогтмол хэллэг дэх асуултын тэмдэг

Таны харж байгаагаар гурав дахь тохиолдолд "s" үсэг хоёр удаа гарч ирдэг тул тогтмол хэллэг нь "testst" гэсэн үгэнд хариу өгөхгүй.

Асуултын тэмдгийг мөн тэмдэгтийн ангиудад ашиглаж болно:

$ echo "tst" | awk "/t?st/($0 хэвлэх)" $ echo "тест" | awk "/t?st/($0 хэвлэх)" $ echo "амт" | awk "/t?st/($0 хэвлэх)" $ echo "taest" | awk "/t?st/($0 хэвлэх)" $ echo "teest" | awk "/t?st/($0 хэвлэх)"


Асуултын тэмдэг ба дүрийн ангиуд

Хэрэв мөрөнд ангийн тэмдэгт байхгүй эсвэл тэдгээрийн аль нэг нь нэг удаа тохиолдвол тогтмол илэрхийлэл ажиллах боловч үгэнд хоёр тэмдэгт гарч ирмэгц систем текст дэх загварт тохирохыг олохоо больсон.

▍Нэмэх тэмдэг

Загварын нэмэх тэмдэгт нь өмнөх тэмдэгт текстэд нэг буюу хэд хэдэн удаа тохиолдвол тогтмол илэрхийлэл хайж буй зүйлтэйгээ тохирно гэдгийг харуулж байна. Гэсэн хэдий ч энэхүү барилга нь тэмдэг байхгүй тохиолдолд хариу үйлдэл үзүүлэхгүй.

$ echo "туршилт" | awk "/te+st/($0 хэвлэх)" $ echo "teest" | awk "/te+st/($0 хэвлэх)" $ echo "tst" | awk "/te+st/($0 хэвлэх)"


Тогтмол илэрхийлэл дэх нэмэх тэмдэг

Энэ жишээнд, хэрэв үгэнд "e" тэмдэгт байхгүй бол ердийн илэрхийллийн систем нь текст дэх загварт тохирохыг олохгүй. Нэмэх тэмдэг нь тэмдэгтүүдийн ангилалтай ажилладаг - ийм байдлаар энэ нь од болон асуултын тэмдэгтэй төстэй юм:

$ echo "tst" | awk "/t+st/($0 хэвлэх)" $ echo "тест" | awk "/t+st/($0 хэвлэх)" $ echo "teast" | awk "/t+st/($0 хэвлэх)" $ echo "teeast" | awk "/t+st/($0 хэвлэх)"


Дээрээс нь тэмдэг, дүрийн ангиуд

Энэ тохиолдолд тухайн мөрөнд ангиас ямар нэгэн тэмдэгт орсон бол текстийг загварт тохирсон гэж үзнэ.

▍Буржгар хаалт

ERE загварт ашиглаж болох буржгар хаалт нь дээр дурдсан тэмдэгтүүдтэй төстэй боловч тэдгээрийн өмнөх тэмдгийн шаардлагатай тоог илүү нарийвчлалтай тодорхойлох боломжийг олгодог. Та хязгаарлалтыг хоёр хэлбэрээр зааж өгч болно:
  • n - хайсан тохиолдлын яг тоог заасан тоо
  • n, m нь "хамгийн багадаа n удаа, гэхдээ m-ээс ихгүй" гэсэн хоёр тоо юм.
Эхний сонголтын жишээ энд байна:

$ echo "tst" | awk "/te(1)st/($0 хэвлэх)" $ echo "тест" | awk "/te(1)st/($0 хэвлэх)"

Хээтэй буржгар хаалтууд, яг хэдэн тохиолдлыг хайж байна

awk-ийн хуучин хувилбаруудад програмыг ердийн илэрхийлэл дэх интервалыг танихын тулд --re-interval командын мөрийн сонголтыг ашиглах шаардлагатай байсан ч шинэ хувилбаруудад энэ шаардлагагүй.

$ echo "tst" | awk "/te(1,2)st/($0 хэвлэх)" $ echo "тест" | awk "/te(1,2)st/($0 хэвлэх)" $ echo "teest" | awk "/te(1,2)st/($0 хэвлэх)" $ echo "teeest" | awk "/te(1,2)st/($0 хэвлэх)"


Буржгар хаалтанд заасан зай

Энэ жишээнд "e" тэмдэгт мөрөнд 1 эсвэл 2 удаа гарч ирэх ёстой бөгөөд дараа нь ердийн илэрхийлэл нь текстэд хариу өгөх болно.

Буржгар хаалтуудыг мөн тэмдэгтийн ангиудад ашиглаж болно. Таны мэддэг зарчмууд энд хэрэгжинэ:

$ echo "tst" | awk "/t(1,2)st/($0 хэвлэх)" $ echo "тест" | awk "/t(1,2)st/($0 хэвлэх)" $ echo "teest" | awk "/t(1,2)st/($0 хэвлэх)" $ echo "teeast" | awk "/t(1,2)st/($0 хэвлэх)"


Буржгар хаалт болон тэмдэгтийн ангиуд

Загвар нь "a" эсвэл "e" тэмдэгтийг нэг эсвэл хоёр удаа агуулж байвал текстэд хариу үйлдэл үзүүлэх болно.

▍Логик "эсвэл" тэмдэг

Тэмдэг | - босоо зураас нь ердийн хэллэг дэх логик "эсвэл" гэсэн утгатай. Ийм тэмдгээр тусгаарлагдсан хэд хэдэн хэлтэрхий агуулсан ердийн хэллэгийг боловсруулахдаа хөдөлгүүр нь анализ хийсэн текстийн аль нэг хэсэгтэй тохирч байвал тохиромжтой гэж үзнэ. Энд нэг жишээ байна:

$ echo "Энэ бол шалгалт" | awk "/test|exam/($0 хэвлэх)" $ echo "Энэ бол шалгалт" | awk "/test|exam/($0 хэвлэх)" $ echo "Энэ бол өөр зүйл" | awk "/тест|шалгалтын/(0$ хэвлэх)"


Тогтмол хэллэг дэх логик "эсвэл"

Энэ жишээнд ердийн хэллэгийг текстээс "тест" эсвэл "шалгалтын" гэсэн үгсийг хайхаар тохируулсан. Загварын хэсгүүд болон тэдгээрийг тусгаарлах тэмдэг хооронд | зай байх ёсгүй.

Энгийн илэрхийллийн фрагментуудыг хаалт ашиглан бүлэглэж болно. Хэрэв та тэмдэгтүүдийн тодорхой дарааллыг бүлэглэвэл систем үүнийг энгийн дүр гэж хүлээн зөвшөөрөх болно. Жишээлбэл, давталтын мета тэмдэгтүүдийг түүнд хэрэглэж болно. Энэ нь иймэрхүү харагдаж байна:

$ echo "Таалагдсан" | awk "/Like(Geeks)?/($0 хэвлэх)" $ echo "LikeGeeks" | awk "/Таалагдсан(Geeks)?/($0 хэвлэх)"


Тогтмол илэрхийллийн фрагментүүдийг бүлэглэх

Эдгээр жишээн дээр "Geeks" гэдэг үгийг хаалтанд хийж, дараа нь асуултын тэмдэг тавьсан байна. Асуултын тэмдэг нь "0 эсвэл 1 давталт" гэсэн утгатай тул тогтмол илэрхийлэл нь "Like" болон "LikeGeeks" гэсэн мөрт хоёуланд нь хариу үйлдэл үзүүлэх болно гэдгийг санаарай.

Практик жишээнүүд

Одоо бид тогтмол хэллэгүүдийн үндсийг авч үзсэн тул тэдэнтэй ямар нэг хэрэгтэй зүйл хийх цаг болжээ.

▍Файлын тоог тоолж байна

Хувьсагч руу бичигдсэн директоруудад байрлах файлуудыг тоолох bash скрипт бичье орчны PATH. Үүнийг хийхийн тулд та эхлээд лавлах замуудын жагсаалтыг гаргах хэрэгтэй. Үүнийг хоёр цэгийг хоосон зайгаар сольж sed ашиглан хийцгээе:

$ echo $PATH | sed "s/:/ /g"
Орлуулах команд нь текст хайх загвар болгон ердийн илэрхийллийг дэмждэг. Энэ тохиолдолд бүх зүйл маш энгийн, бид бүдүүн гэдэсний тэмдгийг хайж байгаа боловч энд өөр зүйл ашиглахад хэн ч саад болохгүй - энэ бүхэн тодорхой даалгавараас хамаарна.
Одоо та гарсан жагсаалтыг давталтаар дамжуулж, файлын тоог тоолоход шаардлагатай үйлдлүүдийг хийх хэрэгтэй. Скриптийн ерөнхий тойм дараах байдалтай байна.

Mypath=$(echo $PATH | sed "s/:/ /g") $mypath доторх лавлахыг хийсэн.
Одоо ls командыг ашиглан скриптийн бүрэн текстийг бичиж, лавлах тус бүрийн файлын тооны талаарх мэдээллийг авч үзье.

#!/bin/bash mypath=$(echo $PATH | sed "s/:/ /g") count=0 $mypath доторх лавлахыг шалгах=$(ls $директор) $check do count=$ [ $count + 1 ] хийгдсэн цуурай "$директор - $count" count=0 хийгдсэн
Скриптийг ажиллуулж байх үед PATH-ийн зарим сангууд байхгүй байж болох ч энэ нь одоо байгаа директоруудын файлуудыг тоолоход саад болохгүй.


Файл тоолох

Энэ жишээний гол үнэ цэнэ нь ижил аргыг ашигласнаар та илүү төвөгтэй асуудлыг шийдэж чадна. Аль нь таны хэрэгцээ шаардлагаас яг шалтгаална.

▍Имэйл хаягийг шалгаж байна

Хаяг шалгах боломжийг олгодог тогтмол илэрхийллийн асар их цуглуулгатай вэбсайтууд байдаг Имэйл, утасны дугаарууд, гэх мэт. Гэсэн хэдий ч бэлэн зүйлийг авах нь нэг хэрэг, өөрөө ямар нэгэн зүйлийг бүтээх нь огт өөр зүйл юм. Тиймээс цахим шуудангийн хаягийг шалгах ердийн илэрхийлэл бичье. Эх сурвалжийн мэдээлэлд дүн шинжилгээ хийж эхэлцгээе. Жишээлбэл, энд тодорхой хаяг байна:

[имэйлээр хамгаалагдсан]
Хэрэглэгчийн нэр, хэрэглэгчийн нэр нь үсэг тоо болон бусад тэмдэгтүүдээс бүрдэж болно. Тухайлбал, энэ нь цэг, зураас, доогуур зураас, нэмэх тэмдэг юм. Хэрэглэгчийн нэрний ард @ тэмдэг байна.

Энэ мэдлэгээр зэвсэглээд хэрэглэгчийн нэрийг шалгахад хэрэглэгддэг ердийн хэллэгийг зүүн талаас нь угсарч эхэлцгээе. Эндээс бидэнд юу байна:

^(+)@
Энэ тогтмол хэллэгийг дараах байдлаар уншиж болно: "Мөр нь дөрвөлжин хаалтанд заасан бүлгийн хамгийн багадаа нэг тэмдэгтээр эхэлж, дараа нь @ тэмдэг тавих ёстой."

Одоо - хостын нэрийн дараалал - хостын нэр. Хэрэглэгчийн нэртэй ижил дүрэм энд үйлчилдэг тул түүний загвар дараах байдлаар харагдах болно.

(+)
Дээд түвшний домэйн нэр хамаарна тусгай дүрэм. Зөвхөн цагаан толгойн үсгийн тэмдэгт байж болох бөгөөд үүнээс дор хаяж хоёр байх ёстой (жишээлбэл, ийм домэйн нь ихэвчлэн улсын код агуулдаг), таваас илүүгүй байх ёстой. Энэ бүхэн нь хаягийн сүүлчийн хэсгийг шалгах загвар нь дараах байдалтай байна гэсэн үг юм.

\.({2,5})$
Та үүнийг дараах байдлаар уншиж болно: "Эхлээд цэг байх ёстой, дараа нь 2-5 цагаан толгойн тэмдэгт, дараа нь мөр дуусна."

Тогтмол хэллэгийн бие даасан хэсгүүдэд зориулж загваруудыг бэлтгэсний дараа тэдгээрийг нэгтгэж үзье.

^(+)@(+)\.({2,5})$
Одоо юу болсныг шалгах л үлдлээ.

$ цуурай " [имэйлээр хамгаалагдсан]" | awk "/^(+)@(+)\.((2,5))$/($0 хэвлэх)" $ echo " [имэйлээр хамгаалагдсан]" | awk "/^(+)@(+)\.((2,5))$/($0 хэвлэх)"


Энгийн илэрхийлэл ашиглан имэйл хаягийг баталгаажуулах

awk руу дамжуулсан текст дэлгэцэн дээр гарч байгаа нь систем үүнийг имэйл хаяг гэж хүлээн зөвшөөрсөн гэсэн үг юм.

Үр дүн

Өгүүллийн эхэнд таарсан цахим шуудангийн хаягийг шалгах ердийн илэрхийлэл тэр үед огт ойлгомжгүй мэт санагдаж байсан бол одоо энэ нь утгагүй тэмдэгт шиг харагдахаа больсон гэж найдаж байна. Хэрэв энэ үнэхээр тийм бол энэ нь гэсэн үг юм энэ материалзорилгоо биелүүлсэн. Үнэн хэрэгтээ байнгын хэллэг бол таны насан туршдаа судлах сэдэв боловч бидний авч үзсэн багахан зүйл ч гэсэн танд нэлээд дэвшилтэт текстийг боловсруулдаг скрипт бичихэд тусалж чадна.

Энэ цуврал материалд бид ихэвчлэн маш их харуулсан энгийн жишээнүүдшууд утгаараа хэд хэдэн мөрөөс бүрдсэн bash скриптүүд. Дараагийн удаа бид илүү том зүйлийг харах болно.

Эрхэм уншигчид! Та командын мөрийн скрипт дэх текстийг боловсруулахдаа ердийн илэрхийлэл ашигладаг уу?

Хамгийн хэрэгтэй, онцлог шинж чанартай багуудын нэг Линукс терминал- "grep" команд. Grep гэдэг нь "дэлхийн тогтмол илэрхийлэл хэвлэх" (өөрөөр хэлбэл "байнгын илэрхийлэлтэй тохирох мөрүүдийг хаанаас ч хайгаад хэвлэх") гэсэн товчлол юм. Энэ нь grep ашиглан оролт нь заасан загвартай тохирч байгаа эсэхийг шалгах боломжтой гэсэн үг юм.

Өчүүхэн мэт санагдах энэ программыг зөв ашиглавал маш хүчтэй. Нарийн төвөгтэй дүрмийн дагуу оролтыг эрэмбэлэх чадвар нь түүнийг олон тушаалын хэлхээнд түгээмэл холбоос болгодог.

Энэ заавар нь grep командын зарим боломжуудыг авч үзээд дараа нь ердийн илэрхийлэл ашиглах руу шилждэг. Бүгдийг-д тайлбарласан энэ гарын авлагаарга техникийг виртуал серверийг удирдахад ашиглаж болно.

Ашиглалтын үндэс

Хамгийн энгийнээр бол grep нь текст файл дахь үсгийн хэв маягийн тохирлыг олоход хэрэглэгддэг. Энэ нь хэрвээ grep-д хайлтын үг өгвөл тухайн үгийг агуулсан файлын мөр бүрийг хэвлэнэ гэсэн үг.

Жишээлбэл, та Ubuntu систем дээрх GNU General Public License-ийн 3-р хувилбараас "GNU" гэсэн үг агуулсан мөрүүдийг олохын тулд grep ашиглаж болно.

cd /usr/share/common-licenses
grep "GNU" GPL-3
GNU ГЕНЕРАЛ ОЛОН НИЙТИЙН ЛИЦЕНЗ





13. GNU Affero General Public License-тэй хамт ашиглах.
GNU Affero General Public License-ийн 3-р хувилбарын дагуу сингл болгон
...
...

Эхний аргумент болох "GNU" нь хайх загвар, хоёр дахь аргумент болох "GPL-3" нь олох оролтын файл юм.

Үүний үр дүнд текстийн загварыг агуулсан бүх мөр гарна. Заримд нь Линукс түгээлтүүдтаны хайж буй загвар гаралтын мөрөнд тодрох болно.

Ерөнхий сонголтууд

Анхдагч байдлаар, grep тушаал нь оролтын файлаас хатуу заасан хэв маягийг хайж, олсон мөрүүдийг хэвлэдэг. Гэсэн хэдий ч grep-ийн зан төлөвийг зарим нэмэлт тугуудыг нэмж өөрчлөх боломжтой.

Хэрэв та хайлтын параметрийн жижиг үсгийг үл тоомсорлож, загварын том ба жижиг үсгийн хувилбаруудыг хайх шаардлагатай бол "-i" эсвэл "--ignore-case" хэрэгслийг ашиглаж болно.

Жишээлбэл, та том, жижиг эсвэл холимог үсгээр бичсэн "лиценз" гэсэн үгийг ижил файлаас хайж олохын тулд grep ашиглаж болно.

grep -i "лиценз" GPL-3
GNU ГЕНЕРАЛ ОЛОН НИЙТИЙН ЛИЦЕНЗ
Энэ лицензийн баримт бичиг, гэхдээ үүнийг өөрчлөхийг зөвшөөрөхгүй.
GNU General Public License нь үнэгүй, copyleft лиценз юм
Ихэнх програм хангамж болон бусад практик ажлын лицензийг боловсруулсан болно
GNU General Public License нь таны эрх чөлөөг баталгаажуулах зорилготой юм
Манай ихэнх программ хангамжид зориулсан GNU General Public License; энэ нь мөн хамаарна


"Энэ лиценз" нь GNU General Public License-ийн 3-р хувилбарыг хэлнэ.
"Хөтөлбөр" гэдэг нь зохиогчийн эрхээр хамгаалагдсан аливаа бүтээлийг хэлнэ
...
...

Таны харж байгаагаар гаралт нь "LICENSE", "Лиценз", "Лиценз" гэсэн утгатай. Хэрэв файлд "LiCeNsE" тохиолдол байсан бол энэ нь мөн гарна.
Хэрэв та заасан загвар агуулаагүй бүх мөрийг олох шаардлагатай бол "-v" эсвэл "--invert-match" гэсэн тугийг ашиглаж болно.

Жишээлбэл, та "the" гэсэн үг агуулаагүй бүх мөрөнд BSD лицензийг хайхын тулд дараах тушаалыг ашиглаж болно:

grep -v "the" BSD
Бүх эрх хуулиар хамгаалагдсан.
Эх сурвалж болон хоёртын хэлбэрээр дахин хуваарилах, ашиглах, хамт эсвэл байхгүй
уулзаж байна:
Энэ програм хангамжаас гаргаж авсан бүтээгдэхүүнийг дэмжих эсвэл сурталчлахад ашиглаж болно
урьдчилан бичгээр тусгай зөвшөөрөлгүйгээр.
ЭНЭ ПРОГРАММЫ ХЭРЭГЖҮҮЛЭГЧДҮҮД БА ХҮМҮҮС ОРУУЛАГЧДЫН '' БАЙГУУЛЛАГА""""
ИЛҮҮ БУЮУ ШАЛГАРСАН БАТАЛГАА, үүн дотор, гэхдээ үүгээр хязгаарлагдахгүй
...
...

Таны харж байгаагаар "үл тоомсорлох" командыг ашиглаагүй тул сүүлийн хоёр мөрөнд "the" гэсэн үг агуулаагүй байна.

Тэмцээн олдсон мөрийн дугаарыг мэдэх нь үргэлж хэрэгтэй байдаг. Тэдгээрийг "-n" эсвэл "--line-number" гэсэн тугуудыг ашиглан олж болно.

Хэрэв та өмнөх жишээнд энэ тугийг хэрэглэвэл дараах үр дүн гарч ирнэ.

grep -vn "the" BSD
2: Бүх эрх хуулиар хамгаалагдсан.
3:
4: Дахин хуваарилах, эх болон хоёртын хэлбэрээр ашиглах, хамт, эс тооцвол
6: хангагдсан:
13: Энэ програм хангамжаас гаргаж авсан бүтээгдэхүүнийг дэмжих эсвэл сурталчлахад ашиглаж болно
14: тодорхой урьдчилан бичгээр зөвшөөрөл авалгүйгээр.
15:
16: ЭНЭ ПРОГРАММЫГ РЕЖЕНТ, ХҮМҮҮЖИГЧИД '' БАЙГУУЛЛАГА""""
17: ИЛТ БУЮУ ШИЛДЭГ БАТАЛГАА, үүн дотор, гэхдээ үүгээр хязгаарлагдахгүй
...
...

Та одоо "the"-г агуулаагүй мөр бүрт өөрчлөлт оруулах шаардлагатай үед мөрийн дугаар руу хандаж болно.

Тогтмол илэрхийлэл

Оршил хэсэгт дурьдсанчлан grep нь "дэлхийн тогтмол илэрхийлэл хэвлэлт" гэсэн үг юм. Тогтмол илэрхийлэл нь хайлтын тодорхой загварыг дүрсэлсэн текст мөр юм.

Өөр өөр програмууд болон програмчлалын хэлүүд ердийн хэллэгийг арай өөрөөр ашигладаг. Энэ заавар нь Grep-д зориулсан хэв маягийг тайлбарлах аргуудын зөвхөн багахан хэсгийг хамардаг.

Үсэг таарч байна

Дээрх "GNU" ба "the" үгсийг хайх жишээн дээр "GNU" ба "the" тэмдэгтийн мөртэй яг таарч байгаа маш энгийн энгийн хэллэгүүдийг хайсан.

Тэдгээрийг үгийн тохирол гэхээсээ илүүтэй тэмдэгтийн мөрийн зохицол гэж үзэх нь илүү зөв юм. Илүү нарийн төвөгтэй хэв маягтай танилцсаны дараа энэ ялгаа нь илүү чухал болно.

Өгөгдсөн тэмдэгтүүдтэй яг таарч байгаа хээг үсэг үсгээр, тэмдэгтээр нь тааруулж байгаа учраас "үсгийн" хээ гэж нэрлэдэг.

Бүх цагаан толгойн болон тоон тэмдэгтүүд (болон бусад тэмдэгтүүд) бусад илэрхийллийн механизмаар өөрчлөгдөөгүй бол шууд утгаараа таарч байна.

Зангуу тоглолт

Зангуу нь хүссэн тохирох мөрийн байршлыг заадаг тусгай тэмдэгтүүд юм.

Жишээлбэл, та хайлтанд зөвхөн эхэнд нь "GNU" гэсэн үгийг агуулсан мөр хэрэгтэй гэдгийг зааж өгч болно. Үүнийг хийхийн тулд та үсгийн мөрний өмнө "^" зангуу ашиглах хэрэгтэй.

Энэ жишээ нь зөвхөн эхэнд нь "GNU" гэсэн үгийг агуулсан мөрүүдийг хэвлэдэг.

grep "^GNU" GPL-3
Манай ихэнх программ хангамжид зориулсан GNU General Public License; энэ нь мөн хамаарна
GNU General Public License, та хэзээ нэгэн цагт хэвлэгдсэн ямар ч хувилбарыг сонгож болно

Үүний нэгэн адил, "$" зангуу нь үгийн мөрийн дараа зөвхөн хайлт хийж буй тэмдэгтийн мөр нь текстийн мөрийн төгсгөлд байгаа тохиолдолд тохирохыг харуулахын тулд ашиглаж болно.

Дараах тогтмол илэрхийлэл нь зөвхөн төгсгөлд нь "ба" агуулсан мөрүүдийг хэвлэнэ.

grep "ба $" GPL-3
Энэ үнэгүй програм хангамжид ямар ч баталгаа байхгүй. Хэрэглэгчийн аль алинд нь" болон
Хуулбарлах, түгээх болон ашиглах нарийн нөхцөл, нөхцөл


өөр хувилбарыг зөвхөн хааяа болон арилжааны бус байдлаар зөвшөөрдөг
сүлжээг үгүйсгэж болно үед өөрчлөлт нь өөрөө материаллаг болон
сүлжээний үйл ажиллагаанд сөргөөр нөлөөлөх буюу дүрэм зөрчсөн болон
Зохиогчийн эрх эзэмшигч нь тодорхой бус бол түр хугацаагаар болон
анхны лиценз эзэмшигчдээс тусгай зөвшөөрөл авдаг, ажиллуулах, өөрчлөх болон
хийх, ашиглах, худалдах, худалдах, импортлох болон бусад хэлбэрээр ажиллуулах, өөрчлөх болон

Ямар ч дүрд тохирох

Тогтмол хэллэгт цэг (.) нь заасан байршилд дурын тэмдэгт гарч болохыг заадаг.

Жишээлбэл, хэрэв та хоёр тэмдэгт, дараа нь "cept" гэсэн дарааллыг агуулсан тохирохыг олохыг хүсвэл дараах загварыг ашиглах болно.

grep "..cept" GPL-3
ашиглах, энэ нь хамгийн хүлээн зөвшөөрөгдөхгүй газар юм. Тиймээс бид
a
тухайн ажилд ямар ч баталгаа байхгүй гэдгийг хэрэглэгчдэд хэлдэг (

Тусад нь бичсэн тусгай зөвшөөрлийн маягт, эсхүл үл хамаарах зүйл гэж заасан;
Та тодорхой зааснаас бусад тохиолдолд хамрагдсан бүтээлийг сурталчлах, өөрчлөх боломжгүй
9. Хуулбар авахын тулд хүлээн авах шаардлагагүй.
...
...

Таны харж байгаагаар үр дүнд "хүлээн зөвшөөрөх" ба "бусад" гэсэн үгс, мөн эдгээр үгсийн хувилбарууд багтсан болно. Загвар нь текст дотор байсан бол "z2cept" гэсэн дараалалтай тохирно.

Хаалт доторх илэрхийлэл

Бүлэг тэмдэгтүүдийг дөрвөлжин хаалтанд ("") оруулснаар та хаалтанд байгаа тэмдэгтүүдийн аль нэг нь тухайн байрлалд гарч ирж болохыг зааж болно.

Энэ нь хэрэв та "хэтэрхий" эсвэл "хоёр" агуулсан мөрийг олох шаардлагатай бол дараах загварыг ашиглан эдгээр өөрчлөлтүүдийг товч зааж өгч болно гэсэн үг юм.

grep "to" GPL-3
Таны хөтөлбөрүүд ч гэсэн.

GNU GPL-г ашигладаг хөгжүүлэгчид таны эрхийг хоёр алхамаар хамгаална:
хуулбарыг дамжуулахгүй компьютерийн сүлжээ дамжуулахгүй байна.

Сүлжээний серверээс ямар ч төлбөргүй холбогдох эх сурвалж.
...
...

Таны харж байгаагаар файлаас хоёр хувилбар олдсон байна.

Тэмдэгтүүдийг хаалтанд оруулах нь мөн хэд хэдэн ашигтай функцийг хангадаг. Та хаалтанд байгаа тэмдэгтүүдийн жагсаалтыг “^” тэмдэгтээр эхлүүлснээр хаалтанд байгаа тэмдэгтүүдээс бусад бүх зүйл загвартай тохирч байгааг хэлж болно.

Энэ жишээнд ".ode" загварыг ашигласан бөгөөд энэ нь "код" дараалалтай таарахгүй байх ёстой.

grep "[^c]ode" GPL-3
1. Эх код.
загвар, объектын кодыг эзэмшдэг хэнд ч өгөх (1) a
бүтээгдэхүүний хэрэглээний цорын ганц чухал хэлбэр.
Энэ нь интерактив горимд эхлэхэд дараах байдалтай байна.

Хоёрдахь мөрийн гаралт нь "код" гэсэн үгийг агуулж байгааг тэмдэглэх нь зүйтэй. Энэ нь regex эсвэл grep алдаа биш юм.

Харин энэ мөр нь "загвар" гэсэн үгэнд байдаг хээ тааруулах "горим" гэсэн дарааллыг агуулсан учраас хэвлэсэн. Энэ нь хээтэй таарч байсан тул утсыг хэвлэсэн гэсэн үг юм.

Өөр нэг ашигтай шинж чанархаалт - тэмдэгт бүрийг тусад нь оруулахын оронд тэмдэгтийн хүрээг зааж өгөх чадвар.

Энэ нь хэрэв та том үсгээр эхэлсэн мөр бүрийг олох шаардлагатай бол дараах загварыг ашиглаж болно гэсэн үг юм.

grep "^" GPL-3
Манай ихэнх программ хангамжид зориулсан GNU General Public License; энэ нь мөн хамаарна

Тусгай зөвшөөрөл. Тусгай зөвшөөрөл эзэмшигч бүрийг "та" гэж нэрлэдэг. "Лицензүүд" ба


Системийн номын сан эсвэл ерөнхий зориулалтын хэрэгслүүд эсвэл ерөнхийдөө үнэ төлбөргүй байдаг
Эх сурвалж.

...
...

Зарим төрлийн эвлүүлэгтэй холбоотой асуудлаас болж илүү нарийвчлалтай үр дүнд хүрэхийн тулд дээрх жишээнд ашигласан тэмдэгтийн хүрээний оронд POSIX тэмдэгтийн ангиудыг ашиглах нь дээр.
Энэхүү гарын авлагад тусгаагүй олон дүрийн ангиуд байдаг; жишээ нь дээрх жишээн дээрхтэй ижил процедурыг хийхийн тулд та хаалтанд "[:дээд:]" тэмдэгтийн ангиллыг ашиглаж болно.

grep "^[[:дээд:]]" GPL-3
Манай ихэнх программ хангамжид зориулсан GNU General Public License; энэ нь мөн хамаарна
Улс орнууд патентыг хөгжүүлэх, ашиглахыг хязгаарлахыг зөвшөөрөх ёсгүй
Тусгай зөвшөөрөл. Тусгай зөвшөөрөл эзэмшигч бүрийг "та" гэж нэрлэдэг. "Лицензүүд" ба
Бүрэлдэхүүн хэсэг ба (б) нь зөвхөн үүнтэй ажиллах ажлыг ашиглах боломжийг олгоно
Үндсэн бүрэлдэхүүн хэсэг, эсвэл стандарт интерфэйсийг хэрэгжүүлэх
Системийн номын сан эсвэл ерөнхий зориулалтын хэрэгслүүд эсвэл ерөнхийдөө үнэ төлбөргүй байдаг
Эх сурвалж.
Хэрэглэгчийн бүтээгдэхүүнийг хүлээн авагчид үүрд эсвэл хугацаанд шилжүүлнэ
...
...

Загварыг давтах (0 ба түүнээс дээш удаа)

Хамгийн түгээмэл хэрэглэгддэг мета тэмдэгтүүдийн нэг нь "*" тэмдэг бөгөөд энэ нь "өмнөх тэмдэгт эсвэл илэрхийлэлийг 0 ба түүнээс дээш удаа давтах" гэсэн утгатай.

Жишээлбэл, хэрэв та зөвхөн үсэг, тэдгээрийн хооронд ганц хоосон зай агуулсан нээх, хаалт бүхий мөр бүрийг олохыг хүсвэл дараах илэрхийллийг ашиглаж болно.

grep "(*)" GPL-3

түгээх (өөрчлөлттэй эсвэл өөрчлөлтгүйгээр), ашиглах боломжтой болгох
бүтээлийг бүхэлд нь бодвол, (а) -ийн хэвийн хэлбэрт орсон
Бүрэлдэхүүн хэсэг ба (б) нь зөвхөн үүнтэй ажиллах ажлыг ашиглах боломжийг олгоно
(хэрэв байгаа бол) гүйцэтгэх боломжтой ажил эсвэл ашигладаг хөрвүүлэгч
(биет түгээлтийн хэрэгслийг оруулаад), дагалддаг
(биет түгээлтийн хэрэгслийг оруулаад), а
газар (үнэгүй эсвэл төлбөртэй) болон ижил төстэй хандалтыг санал болгоно
...
...

Мета тэмдэгтээс хэрхэн зайлсхийх вэ

Заримдаа та үг үсгийн цэг эсвэл шууд утгаараа нээлттэй хаалт хайх хэрэгтэй байж болно. Эдгээр тэмдэгтүүд нь ердийн хэллэгт тодорхой утгатай байдаг тул та grep-д энэ тохиолдолд тэдний онцгой утга хэрэггүй гэдгийг хэлснээр тэднээс "зугтах" хэрэгтэй.

Эдгээр тэмдэгтүүдээс ихэвчлэн тусгай утгатай тэмдэгтийн өмнө урвуу зураас (\) ашигласнаар зугтаж болно.

Жишээлбэл, хэрэв та том үсгээр эхэлж, цэгээр төгссөн мөрийг олох шаардлагатай бол доорх илэрхийллийг ашиглаж болно. Сүүлчийн цэгийн өмнөх урвуу зураас нь "зугтах" командыг хэлдэг бөгөөд ингэснээр сүүлчийн цэг нь шууд утгыг илэрхийлэх бөгөөд "ямар ч тэмдэгт" гэсэн утгатай:

grep "^.*\.$" GPL-3
Эх сурвалж.
Түүний нэг буюу хэд хэдэн нөхцлөөс үл хамаарах зүйл хийх замаар лиценз олгоно.
Тусгай зөвшөөрөл нь хөтөлбөрийг дамжуулахаас бүрэн татгалзах явдал юм.
ШААРДЛАГАТАЙ БҮХ ҮЙЛЧИЛГЭЭ, ЗАСВАР, ЗАСВАР ҮЙЛЧИЛГЭЭ.
ИЙМ ХОХИРОЛ.
Мөн цахим болон цаасан шуудангаар тантай хэрхэн холбогдох талаарх мэдээллийг нэмнэ үү.

Нарийвчилсан ердийн илэрхийллүүд

Grep командыг өргөтгөсөн ердийн илэрхийллийн хэлээр -E тугийг ашиглан эсвэл grep-ийн оронд egrep командыг дуудаж ашиглаж болно.

Эдгээр командууд нь "өргөтгөсөн тогтмол илэрхийлэл"-ийн чадварыг нээж өгдөг. Өргөтгөсөн ердийн илэрхийлэлд бүх үндсэн мета тэмдэгтүүд, мөн илүү төвөгтэй тохирохыг илэрхийлэх нэмэлт мета тэмдэгтүүд орно.

Бүлэглэх

Өргөтгөсөн ердийн хэллэгүүдийн хамгийн энгийн бөгөөд ашигтай шинж чанаруудын нэг нь илэрхийллийг бүлэглэж, нэг нэгж болгон ашиглах чадвар юм.

Хэлэлцүүлгийг бүлэглэхийн тулд хаалт ашиглана. Өргөтгөсөн ердийн илэрхийллүүдийн гадна хаалт ашиглах шаардлагатай бол тэдгээрийг урвуу налуу зураас ашиглан "зугтаж" болно.

grep "\(бүлэглэх\)" файл.txt
grep -E "(бүлэглэх)" файл.txt
egrep "(бүлэглэх)" файл.txt

Дээрх илэрхийллүүд нь тэнцүү байна.

Сэлгээ

Дөрвөлжин хаалт нь нэг тэмдэгтийн хувьд өөр өөр тохирохыг зааж өгдөг шиг залгах нь тэмдэгтүүдийн мөр эсвэл илэрхийллийн багцад өөр тохирохыг зааж өгөх боломжийг олгодог.

Босоо зураасны тэмдэг “|” нь ээлжлэн солигддог. Хоёр ба түүнээс дээш боломжит хувилбаруудын аль нэгийг тохирох гэж үзэхийн тулд бүлгүүдэд ээлжлэн солихыг ихэвчлэн ашигладаг.

Энэ жишээнд та "GPL" эсвэл "Нийтийн нийтийн лиценз"-ийг хайх хэрэгтэй:

grep -E "(GPL|Нийтийн нийтийн лиценз)" GPL-3
GNU General Public License нь үнэгүй, copyleft лиценз юм
GNU General Public License нь таны эрх чөлөөг баталгаажуулах зорилготой юм
Манай ихэнх программ хангамжид зориулсан GNU General Public License; энэ нь мөн хамаарна
Үнэ. Манай нийтийн нийтийн лицензүүд нь танд итгэлтэй байх зорилготой юм
GNU GPL-г ашигладаг хөгжүүлэгчид таны эрхийг хоёр алхамаар хамгаална:
Хөгжүүлэгчид болон зохиогчдын хамгаалалтыг GPL-д тодорхой тайлбарласан болно
Зохиогчид"-ын төлөө, GPL нь өөрчлөгдсөн хувилбаруудыг гэж тэмдэглэхийг шаарддаг
тэдгээрт дадлага хийхийг хориглох үүднээс GPL-ийн энэ хувилбарыг боловсруулсан
...
...

Хоёр ба түүнээс дээш сонголтуудын хооронд сонголт хийх боломжтой; Үүнийг хийхийн тулд та үлдсэн сонголтуудыг сонгох бүлэгт оруулах хэрэгтэй бөгөөд тус бүрийг "|" босоо тэмдэгт тэмдэг ашиглан тусгаарлах хэрэгтэй.

Тоон үзүүлэлтүүд

Өргөтгөсөн ердийн илэрхийлэлд тэмдэгт хэр олон удаа давтагдаж байгааг илтгэх мета тэмдэгтүүд байдаг нь "*" мета тэмдэгт нь өмнөх тэмдэгт эсвэл тэмдэгтийн мөр 0 ба түүнээс дээш удаа таарч байгааг илтгэдэгтэй адил юм.

Тэмдэгтийг 0 ба түүнээс дээш удаа тааруулахын тулд та "?" тэмдэгтийг ашиглаж болно. Энэ нь өмнөх дүр эсвэл цуврал дүрийг үндсэндээ сонголттой болгоно.

Энэ жишээнд "хуулбарлах" гэсэн дарааллыг нэмэлт бүлэгт оруулснаар "зохиогчийн эрх" болон "баруун" гэсэн тохирч харагдана.

grep -E "(хуулбар)? зөв" GPL-3
Зохиогчийн эрх (C) 2007 Free Software Foundation, Inc.
Таны эрхийг хамгаалахын тулд бусад хүмүүс таныг үгүйсгэхээс урьдчилан сэргийлэх хэрэгтэй
эдгээр эрхийг эсвэл танаас эрхээ өгөхийг хүсч байна. Тиймээс, танд байна
эрхээ мэддэг.
GNU GPL-г ашигладаг хөгжүүлэгчид таны эрхийг хоёр алхамаар хамгаална:
(1) програм хангамжийн зохиогчийн эрхийг баталгаажуулах, (2) танд энэхүү лицензийг санал болгох
"Зохиогчийн эрх" гэдэг нь бусад төрлийн хууль тогтоомжид хамаарах зохиогчийн эрхтэй адил хуулийг хэлнэ
...
...

"+" тэмдэгт нь илэрхийлэлтэй 1 ба түүнээс дээш удаа таарч байна. Энэ нь бараг "*" тэмдэгтэй адил ажилладаг боловч "+" ашиглах үед илэрхийлэл дор хаяж 1 удаа таарч байх ёстой.

Дараах илэрхийлэл нь хоосон зай биш 1 ба түүнээс дээш тэмдэгтээс гадна "чөлөөт" мөртэй тохирч байна:

grep -E "чөлөөт[^[:зай:]]+" GPL-3
GNU General Public License нь үнэгүй, copyleft лиценз юм
бүтээлээ хуваалцах, өөрчлөх эрх чөлөөг чинь хасах. Үүний эсрэгээр,
GNU General Public License нь таны эрх чөлөөг баталгаажуулах зорилготой юм
Бид үнэгүй програм хангамжийн тухай ярихдаа эрх чөлөөг биш харин эрх чөлөөг хэлж байна
үнэгүй програм хангамжийн хуулбарыг тараах эрх чөлөөтэй байх (мөн төлбөр төлнө

таны хүлээн авсан эрх чөлөө. Тэд ч бас хүлээн авч байгаа эсэхийг шалгах хэрэгтэй
хэрэглэгчдийг хамгаалах" программ хангамжийг өөрчлөх эрх чөлөө. Системчилсэн
хэрэглэгчдийн эрх чөлөөг хамгаалахын тулд шаардлагатай бол GPL.
Програмыг үнэгүй болгохын тулд патентыг ашиглах боломжгүй.

Давтагдсан тоглолтын тоо

Хэрэв та таарч давтагдах тоог зааж өгөх шаардлагатай бол буржгар хаалт ("( )") ашиглаж болно. Эдгээр тэмдэгтүүд нь илэрхийллийн тохирох тооны яг тоо, муж, дээд доод хязгаарыг зааж өгөхөд ашиглагддаг.

Хэрэв та гурван эгшгийг хослуулсан бүх мөрийг олох шаардлагатай бол дараах илэрхийллийг ашиглаж болно.

grep -E "(3)" GPL-3
өөрчилсөн бөгөөд ингэснээр тэдний асуудлыг буруугаар тайлбарлахгүй
өмнөх хувилбаруудын зохиогчид.
Хэрэв та анхаарал татахуйц, ямар ч хэрэглүүрээр хүлээн авна уу
Өмнөх хэсэгт заасны дагуу өмчлөх эрхийг нэмж өгнө
Энэ дагуу хүлээсэн үүргээ нэгэн зэрэг биелүүлэхийн тулд хамрагдсан ажил
Хэрэв та 16-20 тэмдэгтээс бүрдэх бүх үгийг олох шаардлагатай бол дараах илэрхийллийг ашиглана уу.
grep -E "[[:альфа:]](16,20)" GPL-3
Хэрэв та програм хангамжийн хуулбарыг тарааж байгаа бол тодорхой үүрэг хариуцлага хүлээх эсвэл
Та үүнийг өөрчил: бусдын эрх чөлөөг хүндэтгэх үүрэг хариуцлага.
в) Тухайн материалын гарал үүслийн талаар ташаа мэдээлэл өгөхийг хориглох, эсвэл

дүгнэлт

Ихэнх тохиолдолд grep тушаал нь файл доторх эсвэл шатлалаас хэв маягийг олоход хэрэгтэй байдаг Файлын систем. Энэ нь маш их цаг хэмнэдэг тул түүний параметрүүд болон синтакстай танилцах нь зүйтэй.

Тогтмол хэллэгүүд нь бүр илүү уян хатан бөгөөд олон алдартай програмуудад ашиглагдаж болно. Жишээлбэл, олон текст засварлагчидТекст хайх, солихын тулд ердийн хэллэг ашиглах.

Нэмж дурдахад, дэвшилтэт програмчлалын хэлүүд нь тодорхой өгөгдлийн хэсэг дээр процедурыг гүйцэтгэхийн тулд ердийн хэллэгийг ашигладаг. Тогтмол хэллэгүүдтэй хэрхэн ажиллахаа мэдэх нь компьютертэй холбоотой нийтлэг асуудлыг шийдвэрлэхэд тустай.

Шошго: ,

Өдрийн мэнд, зочид!

Өнөөдрийн нийтлэлд би ийм том сэдвийг хөндөхийг хүсч байна Тогтмол илэрхийлэл. Нэг нийтлэлийн хүрээнд регексийн сэдэв (тогтмол хэллэгийг хэллэгээр нэрлэдэг) өргөн цар хүрээтэй гэдгийг хүн бүр мэддэг байх гэж бодож байна. Тиймээс би товчхон боловч аль болох тодорхой, өөрийнхөө бодлыг цуглуулж, танд хүргэхийг хичээх болно.

Хэд хэдэн төрлийн тогтмол илэрхийлэл байдаг гэдгийг хэлье.

1. Уламжлалт тогтмол илэрхийллүүд(тэд мөн үндсэн, үндсэн болон үндсэн тогтмол хэллэгүүд(BRE))

  • Эдгээр хэллэгийн синтакс нь хуучирсан гэж тодорхойлсон боловч UNIX-ийн олон хэрэгслүүд өргөн тархсан хэвээр байна.
  • Үндсэн тогтмол хэллэгүүд нь дараах мета тэмдэгтүүдийг агуулдаг (доорх утгын талаар дэлгэрэнгүй):
    • \( \) - ( )-н анхны хувилбар (өргөтгөсөн хувилбарт)
    • \(\) - ()-ын анхны хувилбар (өргөтгөсөн)
    • \n, Хаана n- 1-ээс 9 хүртэлх тоо
  • Эдгээр мета тэмдэгтүүдийг ашиглах онцлогууд:
    • Од нь нэг тэмдэгттэй харгалзах илэрхийлэлийг дагаж мөрдөх ёстой. Жишээ нь: *.
    • Илэрхийлэл \( блок\)* буруу гэж үзэх хэрэгтэй. Зарим тохиолдолд энэ нь мөрийн тэг буюу түүнээс дээш давталттай таарч байна блок. Бусад тохиолдолд энэ нь мөртэй тохирч байна блок* .
    • Тэмдэгтийн ангилалд тусгай тэмдэгтийн утгыг үл тоомсорлодог. Онцгой тохиолдлууд:
    • Олонлогт ^ тэмдэгт нэмэхийн тулд эхлээд тэнд байрлуулж болохгүй.
    • Олонлогт - тэмдэгт нэмэхийн тулд эхлээд эсвэл хамгийн сүүлд байрлуулсан байх ёстой. Жишээлбэл:
      • Үсэг, тоо, хасах, цэг агуулсан DNS нэрийн загвар: [-0-9a-zA-Z.] ;
      • хасах болон тооноос бусад тэмдэгт: [^-0-9] .
    • Олонлогт [ эсвэл ] тэмдэгт нэмэхийн тулд эхлээд үүнийг тэнд байрлуулах ёстой. Жишээлбэл:
      • таарч байна ], [, a эсвэл b.

2. Нарийвчилсан ердийн илэрхийллүүд(тэд байна өргөтгөсөн тогтмол илэрхийллүүд(ЭРЭ))

  • Эдгээр илэрхийллүүдийн синтакс нь үндсэн хэллэгүүдийн синтакстай төстэй бөгөөд дараахь зүйлийг эс тооцвол:
    • ( ) ба () мета тэмдэгтүүдийн урвуу ташуу зураасыг арилгасан.
    • Мета тэмдэгтийн өмнөх урвуу зураас нь түүний тусгай утгыг дарна.
    • Онолын хувьд үгүйсгэсэн жигд бусдизайн\ n .
    • Мета тэмдэгт нэмсэн + , ? , | .

3. Perl-тэй нийцтэй энгийн илэрхийллүүд(тэд байна Perl-тэй нийцтэй тогтмол илэрхийллүүд(PCRE))

  • POSIX ERE-ээс ч илүү баялаг бөгөөд нэгэн зэрэг урьдчилан таамаглах боломжтой синтакстай тул тэдгээрийг ихэвчлэн програмууд ашигладаг.

Тогтмол илэрхийлэл бүрдэнэзагварууд, эс тэгвээс загвар тавиххайх. Загвар нь бүрдэнэ-аас дүрэмхайлтууд, тэдгээрээс бүрддэг тэмдэгтүүдТэгээд мета тэмдэгтүүд.

Хайлтын дүрэмдараах байдлаар тодорхойлогдоно үйл ажиллагаа:

Тооцоолол |

Хоолой (|)хүчинтэй сонголтуудыг салгаж, нэг нь хэлж болно - логик OR. Жишээлбэл, "саарал | саарал" таарч байна сааралэсвэл саарал.

Бүлэг эсвэл нэгдэл ()

Дугуй хаалтоператоруудын хамрах хүрээ, давуу байдлыг тодорхойлоход ашигладаг. Жишээлбэл, "саарал|саарал" болон "gr(a|e)y" нь өөр өөр хэв маяг боловч хоёулаа агуулсан багцыг дүрсэлдэг. сааралТэгээд саарал.

Тоо хэмжээ()? * +

Хэмжигчтэмдэгт эсвэл бүлгийн дараа хэдэн удаа тодорхойлдог өмнөхилэрхийлэл үүсч болно.

ерөнхий илэрхийлэл, давталт байж болно м-ээс n хүртэл.

ерөнхий илэрхийлэл м ба түүнээс дээш давталт.

ерөнхий илэрхийлэл n-ээс илүүгүй давталт.

гөлгөрn давталт.

Асуултын тэмдэггэсэн үг 0 эсвэл 1удаа, адил {0,1} . Жишээлбэл, "colou?r" нь ба өнгө, Мөн өнгө.

Одгэсэн үг 0, 1 эсвэл дурын тоонэг удаа ( {0,} ). Жишээлбэл, "go*gle" таарч байна инээмсэглэх, Google, googleгэх мэт.

Дээрээс ньгэсэн үг дор хаяж 1нэг удаа ( {1,} ). Жишээлбэл, "go+gle" таарч байна Google, googleгэх мэт (гэхдээ үгүй инээмсэглэх).

Эдгээр тогтмол хэллэгүүдийн яг синтакс нь хэрэгжилтээс хамаарна. (өөрөөр хэлбэл, дотор үндсэн тогтмол хэллэгүүдтэмдэг (болон)- урвуу налуу зураасаар зугтсан)

Мета дүрүүд, энгийн үгээр хэлбэл, жинхэнэ утгаараа тохирохгүй тэмдэг, өөрөөр хэлбэл тэмдэг юм. (цэг) нь цэг биш, харин нэг тэмдэгт гэх мэт. Мета тэмдэгтүүд болон тэдгээрийн утга учиртай танилцана уу.

. нийцэж байна ганцаарааямар ч тэмдэг
[ямар нэг зүйл] Тохиромжтой ямар ч синглхаалтанд орсон тэмдэгтүүд. Энэ тохиолдолд: "-" тэмдэгт нь нээлтийн дараа эсвэл хаалтын хаалтны өмнө байрлаж байвал шууд утгаар нь тайлбарлана: эсвэл [-abc]. Үгүй бол энэ нь тэмдэгтийн интервалыг илэрхийлнэ.Жишээ нь "a", "b" эсвэл "c"-тэй таарч байна. Латин цагаан толгойн жижиг үсгүүдтэй тохирч байна. Эдгээр тэмдэглэгээг нэгтгэж болно: a, b, c, q, r, s, t, u, v, w, x, y, z. "[" эсвэл "]" тэмдэгтүүдийг тааруулахад хангалттай. хаалтын хаалт нь нээлтийн тэмдэгтийн дараах эхний тэмдэгт байсан: "]", "[", "a" эсвэл "b"-тэй тохирно. Хэрвээ дөрвөлжин хаалтанд байгаа утга нь ^ тэмдэгтийн өмнө байгаа бол илэрхийллийн утга таарч байна. ганц дүртэдгээрээс хаалтанд байхгүй. Жишээлбэл, [^abc] нь "a", "b" эсвэл "c"-ээс өөр ямар ч тэмдэгттэй таарч байна. [^a-z] нь латин цагаан толгойн жижиг үсгээс бусад бүх тэмдэгттэй тохирно.
^ Текстийн эхэнд (эсвэл горим нь мөр мөрөөр байвал дурын мөрийн эхлэл) таарна.
$ Текстийн төгсгөлд (эсвэл горим нь мөр мөрөөр байвал дурын мөрийн төгсгөл) таарна.
\(\) эсвэл () Дараа нь ашиглаж болох "тэмдэглэгдсэн дэд илэрхийлэл" (бүлэглэсэн илэрхийлэл) зарлана (дараах элементийг үзнэ үү: \ n). "Тэмдэглэгдсэн дэд илэрхийлэл" нь мөн "блок" юм. Бусад операторуудаас ялгаатай нь энэ нь (уламжлалт синтакс дээр) урвуу зураас шаарддаг бөгөөд өргөтгөсөн болон Perl дээр \ тэмдэгт шаардлагагүй.
\n Хаана n- энэ нь 1-ээс 9 хүртэлх тоо; нийцэж байна n th тэмдэглэгдсэн дэд илэрхийлэл (жишээ нь (abcd)\0, өөрөөр хэлбэл abcd тэмдэгтүүд тэгээр тэмдэглэгдсэн). Энэ загвар нь онолын хувьд жигд бус, энэ нь өргөтгөсөн тогтмол илэрхийллийн синтакс дээр хүлээн зөвшөөрөгдөөгүй.
*
  • Однэг тэмдэгтэд тохирсон илэрхийллийн дараа таарна тэгэсвэл илүү хуулбарэнэ (өмнөх) илэрхийлэл. Жишээлбэл, "*" нь хоосон мөртэй таарч, "x", "y", "zx", "zyx" гэх мэт.
  • \n*, Хаана nЭнэ нь 1-ээс 9 хүртэлх цифр бөгөөд тааруулахын тулд тэг буюу түүнээс дээш тохиолдолтой таарч байна n th тэмдэглэгдсэн дэд илэрхийлэл. Жишээлбэл, "\(a.\)c\1*" нь "abcab" болон "abcaba"-тай таарч байгаа боловч "abcac"-д тохирохгүй.

"\(" ба "\)"-д "*" тэмдэглэгдсэн илэрхийлэлийг хууль бус гэж үзнэ. Зарим тохиолдолд энэ нь хаалтанд оруулсан мөрийн тэг буюу түүнээс дээш тохиолдолтой таарч байна. Бусад тохиолдолд энэ нь "*" тэмдэгтийг өгсөн хаалтанд бичсэн илэрхийлэлтэй таарч байна.

\{x,y\} Сүүлийнхтэй тохирч байна ( удахгүй болох) хамгийн багадаа тохиолдох блок xба түүнээс дээш биш yнэг удаа. Жишээлбэл, "a\(3,5\)" нь "aaa", "aaaa" эсвэл "aaaaa"-тай таарч байна. Бусад операторуудаас ялгаатай нь энэ нь (уламжлалт синтакс дээр) урвуу зураас шаарддаг.
.* Тогтмол илэрхийллийн хоёр хэсгийн хоорондох дурын тооны дурын тэмдэгтийн тэмдэглэгээ.

Мета тэмдэгтүүд нь янз бүрийн тохирохыг ашиглахад бидэнд тусалдаг. Гэхдээ бид мета тэмдэгтийг ердийн тэмдэгт, өөрөөр хэлбэл [ (дөрвөлжин хаалт) тэмдгийг дөрвөлжин хаалтаар хэрхэн илэрхийлэх вэ? Зүгээр л:

  • өмнө байх ёстой ( бамбай) мета тэмдэгт (. * + \ ? ( )) урвуу зураас. Жишээлбэл \. эсвэл \[

Зарим тэмдэгтийн багцын тодорхойлолтыг хялбарчлахын тулд тэдгээрийг нэгтгэсэн. баатруудын ангилал, ангилал. Дараах хүснэгтэд үзүүлсэн шиг POSIX нь тодорхой тэмдэгтийн анги, категорийн мэдэгдлийг стандартчилсан.

POSIX анги адилхан тэмдэглэгээ
[:дээд:] том үсэг
[:доод:] жижиг үсэг
[:альфа:] том ба жижиг үсэг
[:alnum:] тоо, том, жижиг үсэг
[:цифр:] тоо
[:xdigit:] арван зургаатын оронтой тоо
[:punt:] [.,!?:…] цэг таслал
[:хоосон:] [\t] зай ба TAB
[:зай:] [\t\n\r\f\v] тэмдэгтүүдийг алгасах
[:cntrl:] хяналтын тэмдэгтүүд
[:граф:] [^\t\n\r\f\v] тамга тэмдэг
[:хэвлэх:] [^\t\n\r\f\v] тамга тэмдэг, алгасах тэмдэг

Regex-д ийм зүйл байдаг:

Шунал регекс

Би үүнийг аль болох тодорхой тайлбарлахыг хичээх болно. Бид бүгдийг олохыг хүсч байна гэж бодъё HTML шошгозарим текст дээр. Асуудлыг нутагшуулсаны дараа бид тэдгээрийн хоорондох утгыг олохыг хүсч байна< и >, эдгээр ижил хаалтуудын хамт. Гэхдээ шошго нь өөр өөр урттай, дор хаяж 50 шошготой байдгийг бид мэднэ.Тэднийг бүгдийг нь жагсааж, мета тэмдэгтээр оруулах нь хэтэрхий их цаг хугацаа шаардсан ажил юм. Гэхдээ бидэнд илэрхийлэл байгаа гэдгийг бид мэднэ.* (цэгэн од), энэ нь мөрөнд ямар ч тооны тэмдэгтийг тодорхойлдог. Ашиглах замаар өгөгдсөн илэрхийлэлБид текстээс олохыг хичээх болно (

Тэгэхээр, Хэрхэн бий болгох вэ RAID түвшин LSI MegaRAID хянагч дээрх 10/50 (Intel SRCU42x, Intel SRCS16-д мөн хамааралтай):

) хоорондох бүх утгууд< и >. Үүний үр дүнд БҮТЭН мөр нь энэ илэрхийлэлтэй тохирно. Яагаад гэвэл regex нь ШУНАЛТАЙ бөгөөд тэдгээрийн хооронд ямар ч БҮХ тооны тэмдэгт авахыг оролддог< и >, тус тус бүх шугам, эхэлж байна < p>Тэгэхээр...ба төгсгөл ...> энэ дүрэмд хамаарах болно!

Энэ жишээ шунал гэж юу байдгийг ойлгомжтой болгосон байх гэж найдаж байна. Энэхүү шуналаас ангижрахын тулд та дараах замыг дагаж болно.

  • тэмдэгтүүдийг анхаарч үзээрэй Үгүй ээхүссэн загварт тохирсон (жишээлбэл:<[^>]*> дээрх тохиолдолд)
  • Шуналгүй гэсэн тоологчийн тодорхойлолтыг нэмж шуналаас ангижрах:
    • *? - "шуналгүй" ("залхуу") тэнцэх *
    • +? - "шуналгүй" ("залхуу") тэнцэх +
    • (n,)? - “шуналгүй” (“залхуу”) тэнцэх (n,)
    • .*? - “шуналгүй” (“залхуу”) гэсэн утгатай.*

Дээр дурдсан бүх зүйл дээр би нэмэхийг хүсч байна Өргөтгөсөн ердийн илэрхийллийн синтакс:

POSIX дахь ердийн илэрхийллүүд нь уламжлалт Unix синтакстай төстэй боловч зарим мета тэмдэгтүүдийг нэмсэн:

Дээрээс ньгэдгийг харуулж байна өмнөхтэмдэг эсвэл бүлэгдавтаж болно нэг буюу хэд хэдэн удаа. Одноос ялгаатай нь дор хаяж нэг давталт шаардлагатай.

Асуултын тэмдэгхийдэг өмнөхтэмдэг эсвэл бүлэг сонголттой. Өөрөөр хэлбэл, харгалзах мөрөнд байхгүй эсвэл байгаа байж болногөлгөр нэгнэг удаа.

Босоо бархуваадаг өөр сонголтуудтогтмол илэрхийллүүд. Нэг тэмдэгт нь хоёр хувилбарыг зааж өгдөг, гэхдээ тэдгээрээс олон байж болно, зүгээр л илүү босоо зураас ашиглана уу. Энэ оператор аль болох их илэрхийлэл ашигладаг гэдгийг санах нь чухал. Ийм учраас альтернатив операторыг хаалтанд ихэвчлэн ашигладаг.

Урвуу налуу зураас ашиглахыг мөн цуцалсан: \(…\) нь (…) болж, \(…\) нь (…) болно.

Нийтлэлийг дуусгахын тулд би regex ашиглах зарим жишээг өгөх болно:

$ cat text1 1 алим 2 лийр 3 банана $ grep p text1 1 алим 2 лийр $ grep "pp*" text1 1 алим 2 лийр $ cat text1 | grep "l\|n" 1 алим 3 банана $ echo -e "энд\n* олох" | grep "\*" * энд $ grep "pl\?.*r" text1 # p, r 2 лийр байгаа мөрөнд $ grep "a.." text1 # мөр, араас нь дор хаяж 2 тэмдэгт 1. алим 3 банана $ grep "" text1 # 3 эсвэл p агуулсан мөрүүдийг хайна уу 1 алим 2 лийр 3 банана $ echo -e "эндээс\n* хайна уу." | grep "[.*]" * энд хаа нэгтээ..нэр]$ echo -e "123\n456\n789\n0" | grep "" 123,456,789 $ sed -e "/\(a.*a\)\|\(p.*p\)/s/a/A/g" text1 # a-г дараа нь ирдэг бүх мөрөнд A-г солино. a эсвэл p-ийн дараа ирдэг p 1 Apple 2 лийр 3 bAnAnA *\./ СҮҮЛИЙН ҮГ./г" Эхлээд. СҮҮЛИЙН ҮГ. Энэ бол СҮҮЛИЙН ҮГ.

Хүндэтгэсэн, МакСим!

grep нь "дэлхийн тогтмол илэрхийлэл принтер" гэсэн үг юм. grep нь танд хэрэгтэй мөрүүдийг хайчилж авдаг текст файлуудХэрэглэгчийн зааж өгсөн текстийг агуулсан.

grep-ийг дангаар нь эсвэл урсгалтай хослуулан хоёр аргаар ашиглаж болно.

grep нь мөрийн загвар эсвэл RegExp ердийн илэрхийллийн загвар эсвэл perl дээр суурилсан ердийн илэрхийлэл гэх мэт олон тооны сонголтуудыг дэмждэг тул үйл ажиллагааны хувьд маш өргөн цар хүрээтэй байдаг.

Өөр өөр учраас функциональ байдал grep хэрэгсэл нь олон сонголттой egrep (Өргөтгөсөн GREP), fgrep (Тогтмол GREP), pgrep (GREP процесс), rgrep (рекурсив GREP)гэх мэт. Гэхдээ эдгээр сонголтууд нь анхны grep-ээс бага зэрэг ялгаатай байдаг.

grep сонголтууд

$ grep -V grep (GNU grep) 2.10 Зохиогчийн эрх (C) 2011 Free Software Foundation, Inc. GPLv3+ лиценз

grep хэрэглүүрт өөрчлөлтүүд бий: egrep (өргөтгөсөн тогтмол илэрхийлэл боловсруулалттай), fgrep (энэ нь $*^|()\ тэмдэгтүүдийг шууд утгаар нь авч үздэг, өөрөөр хэлбэл шууд утгаараа), rgrep (рекурсив хайлтыг идэвхжүүлсэн).

    egrep нь grep -E-тэй адил юм

    fgrep нь grep -F-тэй ижил байна

    rgrep нь grep -r-тэй адилхан

    grep [-b] [-c] [-i] [-l] [-n] [-s] [-v] хязгаарлагдмал_regex_BRE [файл ...]

grep команд нь limited_regex-ийн заасан загвартай эх файл дахь мөрүүдийг тааруулдаг. Хэрэв файл заагаагүй бол стандарт оролтыг ашиглана. Ихэвчлэн амжилттай таарсан мөр бүрийг стандарт гаралт руу хуулдаг; хэрэв хэд хэдэн эх файл байгаа бол файлын нэрийг олсон мөрийн өмнө өгнө. grep нь авсаархан, тодорхой бус алгоритмыг ашигладаг. Хязгаарлагдмал тогтмол хэллэгүүд (утгатай тэмдэгтүүдийн мөр бүхий, үсэг, тоон болон тусгай тэмдэгтүүдийн хязгаарлагдмал багцыг ашигладаг илэрхийллүүд) загвар гэж ойлгогддог. Эдгээр нь ed дээрх тогтмол хэллэгтэй ижил утгатай.

Бүрхүүлийн тайлбараас $, *, , ^, |, () болон \ тэмдэгтүүдээс зайлсхийхийн тулд хязгаарлагдмал_regex-г дан хашилтанд оруулах нь хамгийн хялбар арга юм.

Сонголтууд:

B Мөр бүрийн өмнө олсон блокийн дугаарыг бичнэ. Энэ нь контекстээр блок хайхад хэрэг болно (блокуудыг 0-ээс эхлэн дугаарлана). -c Зөвхөн загвар агуулсан мөрийн тоог хэвлэнэ. -h Тохирсон мөрийг агуулсан файлын нэрийг мөрний өмнө хэвлэхээс сэргийлнэ. Олон файлаас хайхад ашигладаг. -i Харьцуулалт хийхдээ жижиг үсгийг үл тоомсорлодог. -l Зөвхөн тохирох мөрүүдийг агуулсан файлуудын нэрийг мөр бүрт нэгийг хэвлэнэ. Хэрэв файлын олон мөрөнд загвар олдвол файлын нэр давтагдахгүй. -n Файл дахь мөр бүрийн өмнө дугаараа хэвлэнэ (мөрүүдийг 1-ээс эхлэн дугаарлана). -s Байхгүй эсвэл унших боломжгүй файлуудын тухай мессежийг дардаг. -v Загвар агуулсан мөрүүдээс бусад бүх мөрийг хэвлэнэ. -w Илэрхийлэлийг мета тэмдэгтээр хүрээлэгдсэн мэт үгээр хайдаг \< и \>.

grep - тусламж

Хэрэглээ: grep [OPTION]... PATTERN [ФАЙЛ]... ФАЙЛ эсвэл стандарт оролт бүрээс PATTERN хайна. Анхдагчаар PATTERN нь энгийн энгийн илэрхийлэл (BRE) юм. Жишээ: grep -i "Сайн уу ертөнц" menu.h main.c Тогтмол илэрхийллийн төрөл ба түүний тайлбарыг сонгох: -E, --extended-regexp PATTERN - өргөтгөсөн тогтмол илэрхийлэл (ERE) -F, --fixed-regexp PATTERN - тогтмол урттай мөрүүд, шинэ мөрөөр тусгаарлагдсан -G, --basic-regexp PATTERN - энгийн энгийн илэрхийлэл (BRE) -P, --perl-regexp PATTERN - Perl тогтмол илэрхийллүүд -e, --regexp=PATTERN хайлт хийхдээ PATTERN-г ашиглана - f, --file=FILE нь FILE -i-ээс PATTERN авна, --ignore-case ялгааг үл тоомсорлох -w, --word-regexp PATTERN нь бүх үгтэй тохирч байх ёстой -x, --line-regexp PATTERN -z мөрийг бүхэлд нь тааруулах ёстой. , --null-өгөгдлийн мөрүүдийг мөрийн төгсгөлийн тэмдэгтээс илүү хоосон байтаар тусгаарлана. Төрөл бүрийн: -s, --no-мессежүүд алдааны мэдээг дарах -v, --revert-match тохирохгүй мөрүүдийг сонгох -V, - -хувилбар хэвлэх хувилбарын мэдээлэл болон гарах --help энэ тусламжийг үзүүлж, гарах --mmap for хоцрогдсон нийцтэй байдал, үл тоомсорлосон Гаралтын хяналт: -m, --max-count=тогтоосон ДУГААР тохирлын дараа ДУГААР зогсолт -b, --байт-офсет байт офсетийг гаралтын мөрүүдийн хамт хэвлэх -n, --line-number мөрийг хэвлэх гаралтын мөрүүдийн хамт дугаар --line-buffered мөр бүрийн дараа буферийг зайлуулна -H, --with-filename таарах тус бүрийн файлын нэрийг хэвлэх -h, --no-filename гаралтыг файлын нэрээр эхлүүлэхгүй -- label=LABEL стандарт оролтын файлын нэрээр LABEL-г ашиглах -o, --only-матчлах нь PATTERN-д тохирох мөрийн зөвхөн хэсгийг харуулах -q, --quiet, --silent бүх хэвийн гаралтыг дарах --binary-files=TYPE гэж таамаглах тэр хоёртын файлнь TYPE-тэй: хоёртын, текст эсвэл тохирохгүй. -a, --текст --binary-files=тексттэй ижил -Би ижил --binary-files=without-tatch -d, --directories=ACTION сангуудыг хэрхэн зохицуулах ACTION уншиж болно ), давталт (рекурсив) эсвэл алгасах (алгасах). -D, --devices=ACTION төхөөрөмж, FIFO болон залгууруудтай хэрхэн ажиллах талаар ACTION-г унших эсвэл алгасах боломжтой -R, -r, --recursive --directories=recurse --include=F_PATTERN-г зөвхөн F_TEMPLATE-д тохирох файлуудыг боловсруулдаг - -exclude=F_TEMPLATE F_TEMPLATE тохирох файлууд болон сангуудыг алгасах --exclude-from=FILE-н загвар файлуудтай тохирох файлуудыг алгасах --exclude-dir=PATTERN-д тохирох TEMPLATE сангуудыг алгасах болно -L, - -файлуудыг зөвхөн хэвлэхгүй Тохиролгүй ФАЙЛ нэрс -l, --файл-тай таарах нь зөвхөн тохирох ФАЙЛ нэрийг хэвлэнэ -c, --count файл бүрт тохирох мөрийн тоог л хэвлэнэ -T, --initial-tab зэрэгцүүлэх таб (шаардлагатай бол) - Z, --null ФАЙЛ нэрийн ард 0 байт хэвлэх Контекстийн удирдлага: -B, --before-context=NUM өмнөх контекстийн ДУГААР мөрийг хэвлэх -A, --after-context=NUM -ийн ДУГААР мөрийг хэвлэх. дараагийн контекст -C, --контекст[=NUMBER] контекст мөрийн ДУГААР хэвлэх -NUMBER нь --context=NUMBER --color[=WHEN], --colour[=WHEN]-тэй ижил байна тохирохыг ялгахын тулд тэмдэглэгээг ашиглана. шугам; ХЭЗЭЭ үргэлж, хэзээ ч эсвэл автоматаар -U байж болно, --binary нь мөрийн төгсгөлд CR тэмдэгтүүдийг хасдаггүй (MSDOS) -u, --unix-байт-офсет нь CR-с байхгүй мэт офсетийг харуулдаг (MSDOS). ) "egrep"-ийн оронд "grep -E" гэж ажиллуулах ёстой. "fgrep"-ийн оронд "grep -F" гэж таамагласан. “egrep” эсвэл “fgrep” гэж гүйхгүй байсан нь дээр. FILE-г заагаагүй эсвэл FILE нь - бол стандарт оролтыг уншина. Хэрэв хоёроос цөөн файл заасан бол -h гэж үзнэ. Хэрэв тохирол олдвол гарах код нь 0, үгүй ​​бол 1 байна. Хэрэв алдаа гарвал, эсвэл -q сонголтыг заагаагүй бол гарах код 2 байна. Алдааг дараах хаягаар мэдээлнэ үү. Орчуулгын алдааг дараах хаягаар мэдэгдэнэ үү. GNU Grep нүүр хуудас: GNU програмуудтай ажиллахад туслах: