Regex bash maneno ya kawaida. Mifano mitano ya kutumia grep. Vipengele vya kisintaksia vya lugha ya Basha

Kuhusu mafunzo haya

Karibu kwenye Utawala wa Msingi, mafunzo ya pili kati ya manne yaliyoundwa ili kukutayarisha kwa Mtihani wa 101 wa Taasisi ya Utaalam ya Linux. Katika sehemu hii tutaangalia jinsi ya kutumia misemo ya kawaida kutafuta maandishi katika faili kwa kutumia ruwaza. Kisha, utatambulishwa kwa Kiwango cha Udhibiti wa Mfumo wa Faili (FHS), na pia tutakuonyesha jinsi ya kupata faili unazohitaji kwenye mfumo wako. Baada ya hapo, utajifunza jinsi ya kuchukua udhibiti kamili wa michakato katika Linux kwa kuziendesha nyuma, kutazama orodha ya michakato, kuziondoa kutoka kwa terminal, na mengi zaidi. Kinachofuata ni utangulizi wa haraka wa mabomba, uelekezaji kwingine, na amri za kuchakata maandishi. Hatimaye, tutakuletea moduli za Linux kernel.

Hasa, sehemu hii ya mafunzo (Sehemu ya 2) ni bora kwa wale ambao tayari wana ujuzi mzuri wa msingi wa bash na wanataka kupata utangulizi mzuri wa kazi za msingi za utawala wa Linux. Ikiwa wewe ni mgeni kwa Linux, tunapendekeza umalize Sehemu ya 1 ya mfululizo huu wa jinsi ya kufanya kwanza. Ingawa mengi ya nyenzo hii yatakuwa mapya kwa wengine, watumiaji wa Linux wenye uzoefu zaidi wanaweza kupata kuwa njia bora ya kufupisha ujuzi wao wa kimsingi wa usimamizi.



Ikiwa ulisoma toleo la kwanza la somo hili kwa madhumuni mengine isipokuwa kujitayarisha kwa mtihani wa LPI, huenda usihitaji kusoma tena toleo hili. Hata hivyo, ikiwa unapanga kufanya mtihani, basi unapendekezwa sana kusoma tena toleo hili la mafunzo lililorekebishwa.

Maneno ya Kawaida

"Maneno ya kawaida" ni nini?

Usemi wa kawaida ni sintaksia maalum inayotumiwa kuelezea ruwaza za maandishi. Kwenye mifumo ya Linux, misemo ya kawaida hutumiwa sana kwa utafutaji wa muundo katika maandishi, na pia kwa utafutaji na kubadilisha shughuli kwenye mitiririko ya maandishi.

Ikilinganishwa na globbing

Mara tu tunapoanza kuangalia misemo ya kawaida, unaweza kugundua kuwa sintaksia yao inafanana sana na sintaksia ya utangazaji ya jina la faili tuliyoangalia katika Sehemu ya 1. Walakini, usifanye makosa, kufanana huku ni juu sana. Misemo ya mara kwa mara na mifumo ya globbing, hata wakati inaonekana sawa, kimsingi ni mambo tofauti.

Mstari mdogo rahisi

Kwa tahadhari hiyo nje ya njia, hebu tuangalie jambo la msingi zaidi kuhusu misemo ya kawaida, mfuatano rahisi zaidi. Ili kufanya hivyo, tutatumia "grep", amri ambayo inachanganua yaliyomo kwenye faili kulingana na usemi wa kawaida. grep huchapisha kila mstari unaolingana na usemi wa kawaida, ukipuuza mengine:

$ grep bash /etc/passwd
opereta:x:11:0:operator:/mizizi:/bin/bash root:x:0:0::/root:/bin/bash ftp:x:40:1::/home/ftp:/bin/ bash

Hapo juu, paramu ya kwanza kwa grep ni regex; pili ni jina la faili. grep soma kila mstari kutoka /etc/passwd na kutumia laini ndogo ya "bash" ya regex kwake katika kutafuta mechi. Ikiwa mechi ilipatikana, grep ilichapisha mstari mzima; vinginevyo, mstari ulipuuzwa.

Kuelewa kifungu kidogo rahisi

Kwa ujumla, ikiwa unatafuta kamba ndogo, unaweza kuibainisha kihalisi, bila kutumia herufi "maalum". Unahitaji tu kuwa mwangalifu ikiwa kamba yako ndogo ina +, ., *, [, ] au \, ambapo vibambo hivi lazima viepukwe kwa kurudisha nyuma na kamba ndogo iliyoambatanishwa katika nukuu. Hapa kuna mifano ya misemo ya kawaida kama kamba ndogo rahisi:

  • /tmp (tafuta kamba /tmp)
  • "\" (tafuta kamba)
  • "\*kichekesho\*" (tafuta kamba *kichekesho*)
  • "ld\.so" (tafuta kamba ld.so)

Metacharacts

Kwa misemo ya kawaida, kwa kutumia metacharacts, inawezekana kufanya utafutaji changamano zaidi kuliko katika mifano ambayo tumeangalia hivi majuzi. Metacharacter moja kama hiyo ni "." (dot), ambayo inalingana na herufi yoyote moja:

$ grep dev.sda /etc/fstab
/dev/sda3 / reiserfs noatime,ro 1 1 /dev/sda1 /boot reiserfs noauto,noatime,notail 1 2 /dev/sda2 swap swap sw 0 0 #/dev/sda4 /mnt/extra reiserfs noatime,rw 1 1

Katika mfano huu, maandishi dev.sda hayaonekani kwenye mistari yoyote kutoka /etc/fstab. Hata hivyo, grep huitakagua si kihalisi kwa mstari wa dev.sda, lakini kwa muundo wa dev.sda. Kumbuka kwamba "." italingana na mhusika yeyote. Kama unaweza kuona, metacharacter "." ni sawa kiutendaji na jinsi metacharacter "?" katika uingizwaji wa globu.

Matumizi

Ikiwa tunataka kuwa mahususi zaidi kuhusu mhusika kuliko "."

$ grep dev.sda /etc/fstab
/dev/sda1 /boot reiserfs noauto,noatime,notail 1 2 /dev/sda2 hubadilishana kubadilishana sw 0 0

Kama ulivyoona, haswa, ujenzi huu wa kisintaksia hufanya kazi sawa na "" ujenzi wakati wa kubadilisha majina ya faili. Tena, hii ni mojawapo ya utata katika kujifunza semi za kawaida: sintaksia inafanana, lakini si sawa, na sintaksia ya vibadala vya globu, ambayo inatatanisha.

Kwa kutumia [^]

Unaweza kubadilisha maana ya mabano ya mraba kwa kuweka ^ mara baada ya [. Katika hali hii, mabano yatalingana na herufi yoyote ambayo HAIJAOJWA ndani yake. Na tena, kumbuka kuwa tunatumia [^] kwa usemi wa kawaida, na [!] na globu:

$ grep dev.hda[^12] /etc/fstab
/dev/hda3 / reiserfs noatime,ro 1 1 #/dev/hda4 /mnt/extra reiserfs noatime,rw 1 1

Sintaksia tofauti

Ni muhimu sana kutambua kwamba sintaksia ndani ya mabano ya mraba kimsingi ni tofauti na usemi mwingine wa kawaida. Kwa mfano, ikiwa utaweka "." ndani ya mabano ya mraba, hii itawawezesha mabano ya mraba kufanana "." kihalisi, kama 1 na 2 kwenye mfano hapo juu. Kwa kulinganisha, "." zilizowekwa nje ya mabano ya mraba yatafasiriwa kama metacharacter isipokuwa "\" imeongezwa. Tunaweza kuchukua fursa ya ukweli huu kutoa mistari kutoka /etc/fstab ambayo ina laini dev.sda kama ilivyoandikwa:

$ grep dev[.]sda /etc/fstab

Pia, tunaweza kuandika:

$ grep "dev\.sda" /etc/fstab

Semi hizi za kawaida huenda hazilingani na mstari mmoja wako /etc/fstab faili.

Matasymbol*

Baadhi ya methali hazilingani na chochote, lakini hubadilisha maana ya mhusika aliyetangulia. Herufi moja kama hiyo ni * (asteriski), ambayo hutumiwa kulinganisha marudio sufuri au zaidi ya herufi iliyotangulia. Kumbuka kuwa hii inamaanisha kuwa * ina maana tofauti katika regex kuliko katika globbing. Hii hapa ni baadhi ya mifano, na uangalie kwa makini hali zile ambapo ulinganishaji wa usemi wa kawaida hutofautiana na uingizwaji wa globu:

  • ab*c inalingana na "abbbbc" lakini si "abqc" (katika kesi ya ubadilishaji wa globu, mifuatano yote miwili italingana na mchoro. Je, unaelewa kwa nini bado?)
  • ab*c inalingana na "abc" lakini sio "abbqbbc" (tena, na ubadilishaji wa globu, muundo unalingana na kamba zote mbili)
  • ab*c inalingana na "ac" lakini si "cba" (katika kesi ya globbing, "ac" au "cba" hailingani na muundo)
  • b*e inalingana na "bqe" na "kuwa" (badala ya globu inalingana na "bqe" lakini si "kuwa")
  • b*e inalingana na "bccqqe", lakini si "bccc" (wakati wa kutandaza, mchoro utalingana kabisa na wa kwanza, lakini sio wa pili)
  • b*e inalingana na "bqqcce", lakini si "cqe" (sawa na uingizwaji wa globu)
  • b*e inatosheleza "bbbeee" (lakini si katika kesi ya globbing)
  • .* kulinganishwa na mfuatano wowote (ubadilishaji wa globu unatoshelezwa tu na mifuatano inayoanza na ".")
  • foo.* italingana na kamba ndogo yoyote inayoanza na "foo" (katika kesi ya ubadilishaji wa globu, muundo huu utalingana na mifuatano inayoanza na herufi nne "foo.")

Kwa hivyo, hebu turudie kwa ajili ya kuimarisha: mstari "ac" unalingana na usemi wa kawaida "ab*c" kwa sababu nyota pia inaruhusu usemi uliopita (b) kurudiwa mara sifuri. Na tena, ni muhimu kutambua kwamba metacharacter * katika misemo ya kawaida inafasiriwa tofauti kabisa kuliko herufi * katika vibadala vya globu.

Anza na mwisho wa mstari

Metacharacter za mwisho tutakazoangalia kwa undani ni ^ na $, ambazo hutumika kulinganisha mwanzo na mwisho wa mfuatano. Kwa kutumia ^ mwanzoni mwa regex yako, "utatia" muundo wako hadi mwanzo wa mstari. Katika mfano ufuatao, tunatumia usemi wa kawaida ^#, unaolingana na mfuatano wowote unaoanza na herufi #:

$ grep ^# /etc/fstab

#

Mistari kamili ya kawaida

^ na $ zinaweza kuunganishwa ili kufanana na mfuatano mzima. Kwa mfano, usemi ufuatao wa kawaida utalingana na mistari inayoanza na herufi # na kumalizia na herufi "."

$ grep "^#.*\.$" /etc/fstab
# /etc/fstab: habari ya mfumo wa faili tuli.

Katika mfano hapo juu, tuliambatanisha usemi wetu wa kawaida katika nukuu moja ili kuzuia ganda kutafsiri herufi $. Bila nukuu moja, $ ingetoweka kutoka kwa regex yetu kabla ya grep hata kuiona.

Kuhusu waandishi

Daniel Robbins

Daniel Robbins ndiye mwanzilishi wa jumuiya ya Gentoo na muundaji wa mfumo wa uendeshaji wa Gentoo Linux. Daniel anaishi New Mexico na mkewe Mary na binti zake wawili wenye nguvu. Yeye pia ndiye mwanzilishi na Mkurugenzi Mtendaji wa Funtoo, na ameandika nakala nyingi za kiufundi kwa wasanidi wa IBMWorks, Huduma za Wasanidi Programu wa Intel, na Jarida la Watumiaji la C/C++.

Chris Houser

Chris Houser amekuwa wakili wa UNIX tangu 1994, alipojiunga na timu ya utawala katika Chuo Kikuu cha Taylor (Indiana, Marekani), ambako alipokea shahada ya kwanza katika sayansi ya kompyuta na hisabati. Tangu wakati huo amefanya kazi katika maeneo mbalimbali, ikiwa ni pamoja na programu za wavuti, uhariri wa video, viendeshi vya UNIX, na usalama wa siri. Kwa sasa anafanya kazi katika Sentry Data Systems. Chris pia amechangia katika miradi mingi ya bure, kama vile Gentoo Linux na Clojure, na aliandika kitabu The Joy of Clojure.

Aron Griffis

Aaron Griffis anaishi katika eneo la Boston, ambapo ametumia muongo uliopita akifanya kazi huko Hewlett-Packard kwenye miradi kama vile viendesha mtandao vya UNIX vya Tru64, uthibitishaji wa usalama wa Linux, uboreshaji wa Xen na KVM, na hivi majuzi jukwaa la HP ePrint. Anapokuwa hatengenezi programu, Aaron anapenda kufikiria kuhusu matatizo ya upangaji anapoendesha baiskeli yake, kucheza popo, au kushangilia timu ya besiboli ya kitaalamu ya Boston Red Sox.

grep inasimama kwa 'printa ya kujieleza ya kawaida ya kimataifa'. grep hukata mistari unayohitaji kutoka kwa faili za maandishi ambazo zina maandishi maalum ya mtumiaji.

grep inaweza kutumika kwa njia mbili - peke yake au pamoja na mito.

grep ni pana sana katika utendakazi kwa sababu ya idadi kubwa ya chaguo inazotumia, kama vile: kutafuta kwa kutumia muundo wa kamba au muundo wa kawaida wa kujieleza wa RegExp au misemo ya kawaida ya perl, n.k.

Kwa sababu ya utendakazi wake tofauti, zana ya grep ina anuwai nyingi, pamoja na egrep (GREP Iliyoongezwa), fgrep (GREP Isiyohamishika), pgrep (Mchakato wa GREP), rgrep (GREP ya kujirudia) nk. Lakini chaguzi hizi zina tofauti ndogo kutoka kwa grep asili.

chaguzi za grep

$ grep -V grep (GNU grep) 2.10 Hakimiliki (C) 2011 Free Software Foundation, Inc. Leseni GPLv3+

Kuna marekebisho ya matumizi ya grep: egrep (pamoja na usindikaji wa usemi uliopanuliwa), fgrep (ambayo hushughulikia alama za $*^|()\ kama halisi, yaani, kihalisi), rgrep (na utaftaji wa kujirudia umewezeshwa).

    egrep ni sawa na grep -E

    fgrep ni sawa na grep -F

    rgrep ni sawa na grep -r

    grep [-b] [-c] [-i] [-l] [-n] [-s] [-v] restricted_regex_BRE [faili ...]

Amri ya grep inalingana na mistari katika faili za chanzo dhidi ya muundo ulioainishwa na limited_regex. Ikiwa hakuna faili zilizotajwa, uingizaji wa kawaida hutumiwa. Kwa kawaida, kila kamba iliyolinganishwa kwa ufanisi inakiliwa kwa pato la kawaida; ikiwa kuna faili kadhaa za chanzo, jina la faili linapewa kabla ya mstari uliopatikana. grep hutumia algorithm ya kompakt, isiyo ya kuamua. Semi za kawaida zilizozuiliwa (maneno ambayo yana mfuatano wa herufi na maana zao na hutumia seti ndogo ya herufi na nambari na herufi maalum) huchukuliwa kuwa violezo. Yana maana sawa na maneno ya kawaida katika mh.

Ili kuepuka herufi $, *, , ^, |, (), na \ kutoka kwa tafsiri ya ganda, ni rahisi zaidi kuambatanisha contrained_regex katika nukuu moja.

Chaguo:

B Hutanguliza kila mstari na nambari ya kizuizi ambamo ilipatikana. Hii inaweza kuwa muhimu wakati wa kutafuta vitalu kulingana na muktadha (vitalu vinahesabiwa kuanzia 0). -c Huchapisha tu idadi ya mistari iliyo na muundo. -h Huzuia jina la faili iliyo na laini inayolingana kuchapishwa kabla ya laini yenyewe. Inatumika wakati wa kutafuta faili nyingi. -i Hupuuza kesi wakati wa kulinganisha. -l Huchapisha tu majina ya faili zilizo na mifuatano inayolingana, moja kwa kila mstari. Ikiwa mchoro unapatikana kwenye mistari mingi ya faili, jina la faili halirudiwi. -n Huchapisha kabla ya kila mstari nambari yake kwenye faili (mistari imehesabiwa kuanzia 1). -s Hukandamiza ujumbe kuhusu faili ambazo hazipo au zisizoweza kusomeka. -v Huchapisha mistari yote isipokuwa ile iliyo na muundo. -w Hutafuta usemi kama neno, kana kwamba umezungukwa na metacharacts \< и \>.

grep --help

Matumizi: grep [OPTION]... PATTERN [FILE]... Hutafuta PATTERN katika kila FILE au ingizo la kawaida. Kwa chaguo-msingi, PATTERN ni usemi rahisi wa kawaida (BRE). Mfano: grep -i "hello world" menu.h main.c Kuchagua aina ya usemi wa kawaida na tafsiri yake: -E, --extended-regexp PATTERN - usemi uliopanuliwa wa kawaida (ERE) -F, --fixed-regexp PATTERN - masharti ya urefu usiobadilika, yakitenganishwa na laini mpya -G, --basic-regexp PATTERN - usemi rahisi wa kawaida (BRE) -P, --perl-regexp PATTERN - Perl usemi wa kawaida -e, --regexp=PATTERN tumia PATTERN kutafuta - f, --file=FILE chukua PATTERN kutoka FILE -i, --ignore-kesi ya kupuuza tofauti -w, --word-regexp PATTERN lazima ilingane na maneno yote -x, --line-regexp PATTERN lazima ilingane na mstari mzima -z , --null-data mistari hutenganishwa na null byte badala ya herufi ya mwisho ya mstari Miscellaneous: -s, --no-messages hukandamiza ujumbe wa makosa -v, --revert-match chagua mistari isiyolinganishwa -V, - -version print maelezo ya toleo na utoke --help onyesha usaidizi huu na utoke --mmap kwa uoanifu wa nyuma, udhibiti wa pato umepuuzwa: -m, --max-count=NUM stop baada ya NUM mechi zilizobainishwa -b, --byte- offset chapisha byte kukabiliana na mistari ya pato -n, --line-number chapisha nambari ya laini pamoja na mistari ya pato --line-buffered flush bafa baada ya kila mstari -H, --with-filename chapisha jina la faili kwa kila mechi - h , --no-filename usianze kutoa kwa jina la faili --label=LABEL tumia LABEL kama jina la faili kwa ingizo la kawaida -o, --only-matching onyesha sehemu tu ya mstari unaolingana PATTERN -q, --quiet, - - kimya kukandamiza matokeo yote ya kawaida --binary-files=TYPE chukulia kuwa faili ya jozi ina AINA ya binary, maandishi, au bila kulinganisha. "grep -F" inachukuliwa badala ya "fgrep". Ni bora kutokimbia kama "egrep" au "fgrep". Wakati FILE haijabainishwa, au wakati FILE ni -, basi ingizo la kawaida linasomwa. Ikiwa chini ya faili mbili zimeainishwa, -h inachukuliwa. Ikiwa ulinganifu utapatikana, msimbo wa kuondoka utakuwa 0, na 1 ikiwa hitilafu itatokea, au ikiwa chaguo la -q halijabainishwa, msimbo wa kuondoka utakuwa 2. Ripoti hitilafu kwa: Tafadhali ripoti makosa katika tafsiri kwa: Ukurasa wa nyumbani wa GNU Grep: Msaada wa kufanya kazi na programu za GNU:

Mojawapo ya amri muhimu zaidi na zenye vipengele vingi kwenye terminal ya Linux ni amri ya "grep". Jina ni kifupi cha maneno ya Kiingereza "tafuta Globally kwa mistari inayolingana na Usemi wa Kawaida, na Uichapishe" (tafuta kila mahali kwa mistari inayolingana na usemi wa kawaida na uchapishe). Amri ya "grep" huchanganua safu ya mtiririko wa pembejeo kwa mstari, ikitafuta mechi na matokeo (vichungi) tu mistari ambayo ina maandishi yanayolingana na muundo uliopewa - kujieleza mara kwa mara.

Semi za kawaida ni lugha maalum rasmi ya kutafuta na kuendesha mifuatano midogo katika maandishi, kulingana na matumizi ya metacharacter. Sasa karibu lugha zote za kisasa za programu zina msaada wa ndani wa misemo ya kawaida ya usindikaji wa maandishi, lakini kihistoria ulimwengu wa UNIX na, haswa, maoni yaliyowekwa kwenye amri "grep", "sed", nk, yalichangia sana. kwa umaarufu wa mbinu hii Falsafa "kila kitu ni faili" » inaenea kabisa UNIX na ujuzi wa zana za kufanya kazi na faili za maandishi ni mojawapo ya ujuzi unaohitajika wa kila mtumiaji wa Linux.

SAMPULI

GIST | Utafutaji rahisi wa mistari yote ambayo ina maandishi "Adams". Wakati wa kuumbiza mifano hii na inayofuata, tutazingatia utaratibu ufuatao: vigezo vya mstari wa amri juu, mitiririko ya kawaida chini, ingizo la stdin upande wa kushoto na pato la stdout upande wa kulia.

Amri ya "grep" ina idadi ya kuvutia ya chaguzi ambazo unaweza kutaja wakati wa kuiendesha. Unaweza kufanya mambo mengi muhimu na chaguzi hizi, na hauitaji hata kuwa mjuzi wa syntax ya kawaida ya kujieleza.

CHAGUO

Wacha tuanze na ukweli kwamba "grep" haiwezi tu kuchuja kiwango cha uingizaji wa stdin, lakini pia kutafuta kupitia faili. Kwa msingi, grep itatafuta faili tu kwenye saraka ya sasa, lakini kwa chaguo muhimu sana --recursive, unaweza kumwambia grep itafute kwa kujirudia kuanzia saraka fulani.

GIST | Kwa msingi, amri ya grep ni nyeti kwa kesi. Mfano ufuatao unaonyesha jinsi unavyoweza kutafuta bila kuzingatia, kwa mfano, "Adams" na "damu" ni kitu kimoja:

Puuza kesi "adams"

George Washington, 1789-1797 John Adams, 1797-1801 Thomas Jefferson, 1801-1809 John Adams, 1797-1801

GIST | Utafutaji ni kinyume (wakati mwingine wanasema utaftaji uliogeuzwa), ambayo ni kwamba, mistari yote itaonyeshwa isipokuwa ile ambayo ina tukio la muundo maalum:

Geuza-mechi "Adams"

George Washington, 1789-1797 John Adams, 1797-1801 Thomas Jefferson, 1801-1809 George Washington, 1789-1797 Thomas Jefferson, 1801-1809

GIST | Chaguzi, bila shaka, zinaweza na zinapaswa kuunganishwa na kila mmoja. Kwa mfano, utafutaji kinyume na kuonyesha nambari za mfululizo za mistari yenye matukio:

Nambari ya mstari --geuza-linganisha "Adams"

George Washington, 1789-1797 John Adams, 1797-1801 Thomas Jefferson, 1801-1809 1:George Washington, 1789-1797 3:Thomas Jefferson, 1801-1809

GIST | Kuchorea. Wakati mwingine ni rahisi wakati neno tunalotafuta limeangaziwa kwa rangi. Yote hii tayari iko kwenye "grep", iliyobaki ni kujumuisha:

Nambari ya mstari --color=daima "Adams"

George Washington, 1789-1797 John Adams, 1797-1801 Thomas Jefferson, 1801-1809 2:John Adams, 1797-1801

GIST | Tunataka kuchagua makosa yote kutoka kwa faili ya logi, lakini tunajua kwamba mstari unaofuata baada ya kosa unaweza kuwa na taarifa muhimu, basi ni rahisi kuonyesha mistari kadhaa kutoka kwa muktadha. Kwa chaguo-msingi, grep itachapisha tu mstari ambapo mechi ilipatikana, lakini kuna chaguzi kadhaa za kufanya grep ichapishe zaidi. Kuonyesha mistari mingi (kwa upande wetu mbili) baada ya kuingia:

Rangi=daima -A2 "Adams"

George Washington, 1789-1797 John Adams, 1797-1801 Thomas Jefferson, 1801-1809 James Madison, 1809-1817 James Monroe, 1817-1825 John Adams, 1797-1801 Thomas Jefferson, 18-18 Madison 1801-1801

GIST | Vivyo hivyo kwa pato la ziada la mistari mingi kabla ya kiingilio:

Rangi=daima -B2 "James"

George Washington, 1789-1797 John Adams, 1797-1801 Thomas Jefferson, 1801-1809 James Madison, 1809-1817 James Monroe, 1817-1825 John Adams, 1797-1801 Thomas Jefferson, 108 Madison 1818-1817 James Monroe , 1817-1825

GIST | Walakini, mara nyingi unahitaji kuonyesha muktadha wa ulinganifu kuna nukuu fupi zaidi kwa hili. Wacha tuchapishe mistari miwili hapo juu na chini ya kiingilio:

Rangi=daima -C2 "James"

George Washington, 1789-1797 John Adams, 1797-1801 Thomas Jefferson, 1801-1809 James Madison, 1809-1817 James Monroe, 1817-1825 John Quincy Adams, 1825-1829 Andrew Jackson1818-1829 Andrew Jackson 1818-1829 John Adams, 1797-1801 Thomas Jefferson, 1801-1809 James Madison, 1809-1817 James Monroe, 1817-1825 John Quincy Adams, 1825-1829 Andrew Jackson, 1829-1837

GIST | Unapotafuta qwe, kwa chaguo-msingi "grep" pia itatoa qwe123, 345qwerty na mchanganyiko sawa. Wacha tupate mistari hiyo tu ambayo inazima neno zima:

Neno-regexp --color=daima "John"

John Fitzgerald Kennedy, 1961-1963 Lyndon Baines Johnson, 1963-1969 John Fitzgerald Kennedy, 1961-1963

GIST | Na mwishowe, ikiwa unataka tu kujua idadi ya mistari iliyo na mechi ya nambari moja, lakini usionyeshe kitu kingine chochote:

Hesabu --color=daima "John"

John Fitzgerald Kennedy, 1961-1963 Lyndon Baines Johnson, 1963-1969 Richard Milhous Nixon, 1969-1974 2

Ni muhimu kuzingatia kwamba chaguo nyingi zina mwenzake, kwa mfano --ignore-case inaweza kupunguzwa kwa fomu fupi -i, nk.

MANENO YA MSINGI YA KAWAIDA

Semi zote za kawaida zinajumuisha aina mbili za herufi: herufi za kawaida zinazoitwa halisi, na wahusika maalum wanaoitwa wahusika. Katika mifano iliyotangulia, utaftaji ulifanyika kwa kutumia maandishi (mechi halisi ya herufi), lakini kinachofuata kitavutia zaidi. Karibu katika ulimwengu wa maneno ya kawaida!

Alama ^ na alama za dola $ zina maana maalum katika usemi wa kawaida. Wanaitwa "nanga". Nanga ni herufi maalum zinazoonyesha eneo katika safu ya mechi inayotaka. Utafutaji unapofikia nanga, hukagua ili kuona ikiwa kuna mechi, na ikiwa ni hivyo, inaendelea kufuata muundo. bila kuongeza chochote kwenye matokeo.

GIST | Nanga ya utunzaji hutumiwa kuonyesha kuwa usemi wa kawaida unahitaji kujaribiwa tangu mwanzo wa mstari:

Rangi=daima "^J"

George Washington, 1789-1797 John Adams, 1797-1801 Thomas Jefferson, 1801-1809 John Adams, 1797-1801

GIST | Vile vile, nanga ya dola inapaswa kutumika mwishoni mwa mchoro ili kuonyesha kwamba mechi ni halali ikiwa tu mfuatano wa herufi unaotafutwa uko mwisho wa mfuatano wa maandishi na si vinginevyo:

Rangi=daima "9$"

George Washington, 1789-1797 John Adams, 1797-1801 Thomas Jefferson, 1801-1809 Thomas Jefferson, 1801-1809

GIST | Mhusika yeyote. Herufi ya nukta inatumika katika misemo ya kawaida ili kuonyesha kwamba kabisa herufi yoyote inaweza kuonekana katika eneo lililobainishwa:

Rangi=daima "0.$"

GIST | Kinga. Ikiwa unahitaji kupata alama ya dot, basi kutoroka kutasaidia. Herufi ya kutoroka (kawaida ni kurudi nyuma) inayotangulia herufi kama vile nukta hugeuza metacharacter kuwa halisi:

Rangi=daima "\."

George Washington. 1789-1797 John Adams, 1797-1801 Thomas Jefferson, 1801-1809 George Washington. 1789-1797

GIST | Madarasa ya wahusika. Semi za kawaida zinaweza kutumia safu na madarasa ya wahusika. Kwa kufanya hivyo, mabano ya mraba hutumiwa wakati wa kuunda template. Kwa kuweka kikundi cha herufi (pamoja na herufi ambazo zingefasiriwa vinginevyo kama metacharacter) ndani ya mabano ya mraba, unaweza kuonyesha kuwa herufi zozote kwenye mabano zinaweza kuonekana katika nafasi hiyo:

Rangi=daima "0"

George Washington, 1789-1797 John Adams, 1797-1801 Thomas Jefferson, 1801-1809 John Adams, 1797-1801 Thomas Jefferson, 1801-1809

GIST | Masafa. Hizi ni herufi mbili zilizotenganishwa na kistari, kwa mfano 0-9 (tarakimu za decimal) au 0-9a-fA-F (tarakimu hexadesimali):

Rangi=daima ""

George Washington,??? John Adams, 1797-1801 Thomas Jefferson, 1801-1809 John Adams, 1797-1801 Thomas Jefferson, 1801-1809

GIST | Kukanusha. Ikiwa herufi ya kwanza ya usemi katika mabano ya mraba ni kihifadhi, basi herufi zilizobaki huchukuliwa kama seti ya herufi ambazo hazipaswi kuwepo katika nafasi iliyotolewa ya usemi wa kawaida:

Rangi=daima "[^7]$"

George Washington, 1789-1797 John Adams, 1797-1801 Thomas Jefferson, 1801-1809 John Adams, 1797-1801 Thomas Jefferson, 1801-1809

GIST | Madarasa ya wahusika POSIX. Kuna seti fulani ya madarasa ya wahusika yaliyotayarishwa awali ambayo unaweza kutumia katika misemo ya kawaida. Kuna takriban dazeni kati yao, angalia haraka mwongozo ili kuelewa madhumuni ya kila moja. Kwa mfano, hebu tuchuje tarakimu za heksadesimali:

Rangi=daima "^[[:xdigit:]]*$"

4.2 42 42abc 42 42abc

GIST | Rudia (mara 0 au zaidi). Mojawapo ya vibambo vinavyotumika sana ni alama ya kinyota, ambayo inamaanisha "rudia herufi iliyotangulia au usemi wa sifuri au mara zaidi":

Rangi=daima "^*$"

George Washington,??? John Adams, 1797-1801 Thomas Jefferson, 1801-1809 George Washington, ???

Kuna misemo ya msingi ya kawaida BRE (maneno ya kawaida ya msingi) na misemo ya kawaida iliyopanuliwa ERE (maneno ya kawaida yaliyopanuliwa). Metachara zifuatazo zinatambuliwa katika BRE: ^$. * na wahusika wengine wote huchukuliwa kuwa halisi. Je, methali zifuatazo zimeongezwa kwa ERE () ( ) ? + | na kazi zinazohusiana. Kweli, ili kuwachanganya kabisa kila mtu, walikuja na jambo hili katika "grep" - wahusika () ( ) katika BRE wanachukuliwa kama wahusika ikiwa wametoroka na kurudi nyuma, wakati huko ERE, wakiweka nyuma mbele ya methali yoyote inaongoza kwa ukweli kwamba wanachukuliwa kama halisi.

MANENO YA JUU YA KAWAIDA

GIST | Mtengano. Kama vile mabano ya mraba yanavyobainisha tofauti zinazowezekana kwa herufi moja, mtengano hukuruhusu kubainisha ulinganifu mbadala wa mifuatano ya vibambo au misemo. Alama ya upau wima hutumiwa kuonyesha mtengano:

Extended-regexp --color=daima "George|John"

George Washington, 1789-1797 John Adams, 1797-1801 Thomas Jefferson, 1801-1809 George Washington, 1789-1797 John Adams, 1797-1801

GIST | Linganisha sifuri au mara moja. Katika misemo iliyopanuliwa ya kawaida, kuna vielezi kadhaa vya ziada vinavyoonyesha ni mara ngapi herufi au usemi unarudiwa (sawa na jinsi metcharacter ya nyota inavyoonyesha mechi za mara 0 au zaidi). Mojawapo ya methali kama hizo ni alama ya kuuliza, ambayo hufanya herufi au usemi uliotangulia kuwa wa hiari:

Extended-regexp --color=daima "^(Andrew)?John"

John Adams, 1797-1801 Andrew Johnson, 1865-1869 Lyndon Baines Johnson, 1963-1969 John Adams, 1797-1801 Andrew Johnson, 1865-1869

GIST | Linganisha mara moja au zaidi. Kwa kusudi hili, metacharacter kwa namna ya ishara ya kuongeza hutolewa. Inafanya kazi karibu kama ishara ya nyota, isipokuwa kwamba usemi lazima ulingane angalau mara moja:

Extended-regexp --color=always "^[[:alpha:] ]+$"

John Adams Andrew Johnson, 1865-1869 Lyndon Baines Johnson, 1963-1969 John Adams

GIST | Linganisha idadi maalum ya nyakati. Unaweza kutumia braces curly kwa hili. Herufi hizi hutumika kuonyesha nambari kamili, masafa, na kikomo cha juu na cha chini cha idadi ya zinazolingana za usemi:

Extended-regexp --color=daima "(1,3)\.(1,3)\.(1,3)\.(1,3)"

42 127.0.0.1 127.0.0.1

Amri ya grep ni muhimu sana, ina sifa nyingi, na ni rahisi kutumia hivi kwamba ukiijua, huwezi kufikiria kufanya kazi bila hiyo.

Maneno ya kawaida ni chombo chenye nguvu sana cha kutafuta maandishi kwa muundo, usindikaji na kurekebisha masharti, ambayo yanaweza kutumika kutatua matatizo mengi. Hapa ndio kuu:

  • ukaguzi wa maandishi;
  • Tafuta na ubadilishe maandishi kwenye faili;
  • Kubadilisha jina la kundi la faili;
  • Mwingiliano na huduma kama vile Apache;
  • Kuangalia mfuatano ili kupatana na mchoro.

Hii sio orodha kamili; misemo ya kawaida hukuruhusu kufanya mengi zaidi. Lakini kwa watumiaji wapya wanaweza kuonekana kuwa ngumu sana, kwa vile wanatumia lugha maalum ili kuunda. Lakini kwa kuzingatia uwezo uliotolewa, kila msimamizi wa mfumo anapaswa kujua na kuweza kutumia misemo ya kawaida ya Linux.

Katika makala hii, tutaangalia maneno ya kawaida ya bash kwa Kompyuta ili uweze kuelewa vipengele vyote vya chombo hiki.

Kuna aina mbili za wahusika ambazo zinaweza kutumika katika maneno ya kawaida:

  • barua za kawaida;
  • wahusika.

Herufi za kawaida ni herufi, nambari, na alama za uakifishaji zinazounda mfuatano wowote. Maandishi yote yanajumuisha herufi na unaweza kuzitumia katika misemo ya kawaida ili kupata nafasi inayotakiwa katika maandishi.

Metacharacters ni kitu kingine, wao ni nini kutoa usemi mara kwa mara nguvu zao. Ukiwa na methali unaweza kufanya mengi zaidi ya kutafuta mhusika mmoja tu. Unaweza kutafuta michanganyiko ya alama, tumia idadi inayobadilika ya alama, na uchague masafa. Wahusika wote maalum wanaweza kugawanywa katika aina mbili: wahusika badala, ambao huchukua nafasi ya wahusika wa kawaida, au waendeshaji, ambayo inaonyesha mara ngapi tabia inaweza kurudiwa. Syntax ya kawaida ya kujieleza ingeonekana kama hii:

tabia_ya_kawaida maalum character_operator

herufi_badala_maalum maalum character_operator

  • \ - wahusika maalum wa alfabeti huanza na kurudi nyuma, na pia hutumiwa ikiwa unahitaji kutumia tabia maalum kwa namna ya alama yoyote ya punctuation;
  • ^ - inaonyesha mwanzo wa mstari;
  • $ - inaonyesha mwisho wa mstari;
  • * - inaonyesha kuwa tabia ya awali inaweza kurudiwa mara 0 au zaidi;
  • + - inaonyesha kwamba tabia ya awali inapaswa kurudiwa mara moja au zaidi;
  • ? - tabia ya awali inaweza kutokea sifuri au mara moja;
  • (n)- inaonyesha mara ngapi (n) tabia ya awali inapaswa kurudiwa;
  • (N,n)- tabia ya awali inaweza kurudiwa kutoka N hadi n mara;
  • . - tabia yoyote isipokuwa kulisha mstari;
  • - tabia yoyote iliyotajwa kwenye mabano;
  • x|y- ishara x au ishara y;
  • [^az]- tabia yoyote isipokuwa yale yaliyoonyeshwa kwenye mabano;
  • - tabia yoyote kutoka kwa safu maalum;
  • [^a-z]- tabia yoyote ambayo haiko katika safu;
  • \b- inaashiria mpaka wa neno na nafasi;
  • \B- ina maana kwamba tabia lazima iwe ndani ya neno, kwa mfano, ux itafanana na uxb au tuxedo, lakini haitafanana na Linux;
  • \d- inamaanisha kuwa ishara ni nambari;
  • \D- ishara isiyo ya digital;
  • \n- tabia ya kulisha mstari;
  • \s- moja ya wahusika wa nafasi, nafasi, tab, na kadhalika;
  • \S- tabia yoyote isipokuwa nafasi;
  • \t- tabia ya kichupo;
  • \v- tabia ya kichupo cha wima;
  • \w- tabia yoyote ya alfabeti, ikiwa ni pamoja na kusisitiza;
  • \W- tabia yoyote ya alfabeti, isipokuwa kusisitiza;
  • \uXXX- Ishara ya Unicdoe.

Ni muhimu kutambua kwamba lazima utumie kufyeka kabla ya herufi maalum za kialfabeti ili kuonyesha kwamba herufi maalum inakuja ijayo. Kinyume chake pia ni kweli, ikiwa unataka kutumia herufi maalum ambayo inatumika bila kufyeka kama mhusika wa kawaida, basi itabidi uongeze kufyeka.

Kwa mfano, unataka kupata mstari 1+ 2=3 katika maandishi. Ikiwa utatumia kamba hii kama usemi wa kawaida, hautapata chochote, kwa sababu mfumo unatafsiri plus kama herufi maalum ambayo inaonyesha kuwa kitengo cha awali kinapaswa kurudiwa mara moja au zaidi. Kwa hivyo inahitaji kuepukwa: 1 \+ 2 = 3. Bila kutoroka, usemi wetu wa kawaida ungelingana tu na mfuatano 11=3 au 111=3 na kadhalika. Hakuna haja ya kuweka mstari mbele ya sawa, kwa sababu sio tabia maalum.

Mifano ya kutumia misemo ya kawaida

Sasa kwa kuwa tumeshughulikia mambo ya msingi na unajua jinsi kila kitu kinavyofanya kazi, kilichobaki ni kujumuisha maarifa ambayo umepata kuhusu misemo ya kawaida ya linux grep katika mazoezi. Herufi mbili maalum muhimu sana ni ^ na $, ambazo zinaonyesha mwanzo na mwisho wa mstari. Kwa mfano, tunataka kuwasajili watumiaji wote katika mfumo wetu ambao jina linaanza na s. Basi unaweza kutumia usemi wa kawaida "^s". Unaweza kutumia egrep amri:

egrep "^s" /etc/passwd

Ikiwa tunataka kuchagua mistari kulingana na herufi ya mwisho kwenye mstari, tunaweza kutumia $ kwa hili. Kwa mfano, wacha tuchague watumiaji wote wa mfumo, bila ganda, rekodi kuhusu watumiaji kama hao huisha kwa uwongo:

egrep "false$" /etc/passwd

Ili kuonyesha majina ya watumiaji yanayoanza na s au d, tumia usemi huu:

egrep "^" /etc/passwd

Matokeo sawa yanaweza kupatikana kwa kutumia ishara "|". Chaguo la kwanza linafaa zaidi kwa safu, na la pili hutumiwa mara nyingi kwa kawaida au/au:

egrep "^" /etc/passwd

Sasa hebu tuchague watumiaji wote ambao majina yao hayana urefu wa herufi tatu. Jina la mtumiaji linaisha na koloni. Tunaweza kusema kuwa inaweza kuwa na herufi yoyote ya alfabeti, ambayo lazima irudiwe mara tatu, kabla ya koloni:

egrep "^\w(3):" /etc/passwd

Hitimisho

Katika nakala hii tulishughulikia misemo ya kawaida ya Linux, lakini hiyo ilikuwa misingi tu. Ikiwa unachimba kidogo zaidi, utapata kwamba unaweza kufanya mambo mengi ya kuvutia zaidi na chombo hiki. Kuchukua muda wa kujieleza mara kwa mara bila shaka kutafaa.

Kuhitimisha, hotuba kutoka kwa Yandex kuhusu maneno ya kawaida:

Asili: Misingi ya Linux
Mwandishi: Paul Cobbaut
Tarehe ya kuchapishwa: Oktoba 16, 2014
Tafsiri: A. Panin
Tarehe ya kutafsiri: Desemba 17, 2014

Sura ya 19. Maneno ya Kawaida

Injini ya kujieleza ya kawaida ni chombo chenye nguvu sana katika mfumo wa Linux. Maneno ya kawaida yanaweza kutumika na programu nyingi, kama vile bash, vi, rename, grep, sed na zingine.

Sura hii inatoa ufahamu wa kimsingi wa misemo ya kawaida.

Matoleo ya sintaksia ya kujieleza ya kawaida

Kuna matoleo matatu tofauti ya sintaksia za usemi za kawaida: BRE: Vielezi vya Msingi vya Kawaida ERE: Vielezi Vilivyoongezwa vya Kawaida PCRE: Perl Regular Expressions

Kulingana na zana iliyotumiwa, sintaksia moja au zaidi zilizotajwa zinaweza kutumika.

Kwa mfano, zana ya grep inasaidia -E chaguo kulazimisha matumizi ya syntax ya kawaida ya kujieleza (ERE) wakati wa kuchanganua usemi wa kawaida, wakati -G chaguo hulazimisha matumizi ya syntax ya kawaida ya usemi (BRE) na -P chaguo. - Perl Programming Lugha Usemi wa Kawaida (PCRE) syntax.

Pia kumbuka kuwa grep pia inasaidia -F chaguo, ambayo hukuruhusu kusoma usemi wa kawaida bila kusindika.

Zana ya sed pia inasaidia chaguzi zinazokuruhusu kuchagua sintaksia ya kawaida ya usemi.

Soma kila mara kurasa za mwongozo za zana unazotumia!

matumizi ya grep

Kamba za uchapishaji zinazolingana na muundo

Huduma ya grep ni zana maarufu kwenye mifumo ya Linux iliyoundwa kupata mifuatano inayolingana na muundo maalum. Chini ni mifano ya maneno rahisi ya kawaida ambayo yanaweza kutumika wakati wa kufanya kazi nayo.

Haya ndiyo yaliyomo kwenye faili ya majaribio inayotumika katika mifano. Faili hii ina mistari mitatu (au mistari mipya mitatu).

paul@rhel65:~$ paka majina Tania Laura Valentina

Unapotafuta herufi moja, ni mistari tu ambayo ina herufi iliyobainishwa ndiyo itarejeshwa.

paul@rhel65:~$ grep u amtaja Laura paul@rhel65:~$ grep na majina Valentina paul@rhel65:~$ grep namtaja Tania Valentina

Ulinganisho wa muundo uliotumika katika mfano huu ni wa moja kwa moja; ikiwa herufi fulani itatokea kwenye kamba, grep itachapisha kamba hiyo.

Mfano huu unaonyesha jinsi shirika la grep linavyofanya kazi, kulingana na ambayo usemi wa kawaida ia utalingana na kamba Tan ia, lakini si kamba Valentina, na usemi wa kawaida katika utalingana na mfuatano wa Valent katika a, lakini si kamba Ta ni a.

paul@rhel65:~$ grep a names Tania Laura Valentina paul@rhel65:~$ grep ia amtaja Tania paul@rhel65:~$ grep kwa majina Valentina paul@rhel65:~$

Tabia moja au nyingine

Sintaksia ya PCRE na ERE zinaweza kutumia ishara ya kuunda chaneli ya programu, ambayo katika hali hii ingewakilisha utendakazi wa kimantiki AU. Katika mfano huu, tutatumia matumizi ya grep kutafuta mistari iliyo na herufi i au herufi a.

paul@debian7:~$ orodha ya paka Tania Laura paul@debian7:~$ grep -E orodha ya "i|a" Tania Laura

Kumbuka kuwa tunatumia -E chaguo grep kulazimisha usemi wetu wa kawaida kufasiriwa kama usemi kwa kutumia syntax ya kawaida ya usemi (ERE).

Itabidi tuepuke kibambo cha kuunda chaneli kwa usemi wa kawaida kwa kutumia sintaksia ya Basic Regular Expression (BRE) ili kufasiri herufi hii vile vile kama operesheni ya kimantiki AU.

paul@debian7:~$ grep -G "i|a" orodha paul@debian7:~$ grep -G orodha ya "i\|a" Tania Laura

Mechi moja au zaidi

Herufi * inalingana na sifuri, tukio moja au zaidi la herufi iliyotangulia, na herufi + inalingana na herufi ifuatayo.

paul@debian7:~$ paka list2 ll lol lool loool paul@debian7:~$ grep -E "o*" list2 ll lol lool loool paul@debian7:~$ grep -E "o+" list2 lol lool loool paul@debian7: ~$

Mechi mwishoni mwa mstari

Katika mifano ifuatayo tutatumia faili hii: paul@debian7:~$ paka majina Tania Laura Valentina Fleur Floor

Mifano miwili hapa chini inaonyesha mbinu ya kutumia ishara ya dola ili kufanana na mwisho wa mfuatano.

paul@debian7:~$ grep a$ majina Tania Laura Valentina paul@debian7:~$ grep r$ majina Fleur Floor

Kukimbia maneno yaliyotafutwa kwa kutumia herufi za nafasi sio suluhisho nzuri (kwani herufi zingine pia zinaweza kutumika kama vikomo vya maneno). Mfano ulio hapa chini unaonyesha mbinu ya kutumia mfuatano wa herufi \b kutafuta mistari iliyo na neno fulani badala ya mfuatano wa herufi: paul@debian7:~$ grep maandishi ya "\bover\b" Majira ya baridi yamekwisha. Je, unaweza kufika huko? paul@debian7:~$

Kumbuka kuwa grep pia inasaidia -w chaguo la kufanya utaftaji wa maneno.

paul@debian7:~$ cat text Gavana anatawala. Majira ya baridi yamekwisha. Je, unaweza kufika huko? paul@debian7:~$ grep -w over text Majira ya baridi yamepita. Je, unaweza kufika huko? paul@debian7:~$

grep Chaguzi

Wakati mwingine ni rahisi kuchanganya usemi rahisi wa kawaida na chaguzi za grep kuliko kuunda usemi ngumu zaidi wa kawaida. Chaguzi hizi zilijadiliwa hapo awali: grep -i grep -v grep -w grep -A5 grep -B5 grep -C5

Kuzuia ganda kutokana na kupanua usemi wa kawaida

Ishara ya dola ni tabia maalum kwa kujieleza mara kwa mara na shell (fikiria juu ya vigezo vya shell na inlines za shell). Kwa hivyo, inashauriwa uepuke maneno ya kawaida chini ya hali zote, kwa sababu kutoroka kwa usemi wa kawaida husaidia kuzuia ganda kupanua usemi.

paul@debian7:~$ grep "r$" majina ya Fleur Floor badilisha jina

badilisha jina la matumizi

Utekelezaji wa matumizi ya kubadilisha jina

Katika usambazaji wa Debain Linux, kando ya /usr/bin/rename njia kuna kiunga cha hati /usr/bin/prename, iliyosanikishwa kutoka kwa perl kifurushi.

paul@pi ~ $ dpkg -S $(readlink -f $(ambayo ibadilishe jina)) perl: /usr/bin/prename

Amri ya kubadilisha jina inatekelezwa kwa kweli katika mfumo wa hati kwa kutumia misemo ya kawaida ya lugha ya programu ya perl. Maagizo kamili ya kutumia hati hii yanaweza kupatikana kwa kuendesha perldoc perlrequick amri (baada ya kusakinisha perldoc kifurushi).

root@pi:~# aptitude install perl-doc Vifurushi MPYA vifuatavyo vitasakinishwa: perl-doc 0 vifurushi, 1 vipya vilivyosakinishwa, vifurushi 0 vilivyotiwa alama ya kuondolewa, na vifurushi 0 havijasasishwa. Ni muhimu kupata 8,170 kB ya kumbukumbu. Baada ya kufungua, 13.2 MB itakaliwa. Pata: 1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main perl-do... Ilipokea kB 8,170 katika miaka ya 19 (412 kB/s) Kuchagua kifurushi ambacho hakikuchaguliwa hapo awali perl-doc. (Kusoma hifadhidata... kwa sasa faili na saraka 67121 zimesakinishwa.) Hufungua perl-doc (kutoka.../perl-doc_5.14.2-21+rpi2_all.deb) ... Inaongeza "diversion of /usr/bin /perldoc kwa /usr/bin/perldoc.stub by perl-doc" Michakato ya kuchochea kwa man-db ... Inasanidi kifurushi cha perl-doc (5.14.2-21+rpi2) ... root@pi:~# perldoc perlrequick

Sintaksia inayojulikana sana

Matumizi ya kawaida ya matumizi ya kubadilisha jina ni kupata faili zilizo na majina ambayo yanafanana na muundo maalum katika mfumo wa kamba, na kubadilisha kamba hiyo na kamba nyingine.

Kwa kawaida kitendo hiki hufafanuliwa kwa kutumia usemi wa kawaida s/string/another string/ , kama inavyoonyeshwa katika mfano: paul@pi ~ $ ls abc allfiles.TXT bllfiles.TXT Scratch tennis2.TXT abc.conf chelezo cllfiles.TXT temp.TXT tenisi TXT paul@pi ~ $ rename "s/TXT/text/" * paul@pi ~ $ ls abc allfiles.text bllfiles.text Scratch tennis2.text abc.conf chelezo cllfiles.text temp.text tennis.text.

Na hapa chini ni mfano mwingine unaotumia sintaksia ya kubadilisha jina la matumizi inayojulikana zaidi kubadilisha viendelezi vya faili zilezile tena: paul@pi ~ $ ls abc allfiles.text bllfiles.text Scratch tennis2.text abc.conf chelezo cllfiles.text temp. tenisi ya maandishi .maandishi paul@pi ~ $ badilisha jina "s/text/txt/" *.text paul@pi ~ $ ls abc allfiles.txt bllfiles.txt Scratch tennis2.txt abc.conf chelezo cllfiles.txt temp.txt tenisi. txt paul @pi~$

Mfano ufuatao unaonyesha shida ambayo unaweza kukutana nayo unapotumia sintaksia hii.

paul@pi ~ $ touch atxt.txt paul@pi ~ $ rename "s/txt/problem/" atxt.txt paul@pi ~ $ ls abc allfiles.txt chelezo cllfiles.txt temp.txt tennis.txt abc.conf tatizo .txt bllfiles.txt Scratch tennis2.txt paul@pi ~ $

Wakati wa kutekeleza amri inayohusika, tukio la kwanza tu la kamba iliyotafutwa hubadilishwa.

Uingizwaji wa ulimwengu

Sintaksia iliyotumika katika mfano uliopita inaweza kuelezewa kama ifuatavyo: s/regex/string to replace/ . Maelezo haya ni rahisi na dhahiri, kwani unachotakiwa kufanya ni kuweka usemi wa kawaida kati ya mikwaruzo miwili ya kwanza na kamba mbadala kati ya mikwaju miwili ya mwisho.

Mfano ufuatao unapanuka kwenye sintaksia hii kidogo kwa kuongeza kirekebishaji.

paul@pi ~ $ rename -n "s/TXT/txt/g" aTXT.TXT aTXT.TXT iliyopewa jina la atxt.txt paul@pi ~ $

Sasa sintaksia tunayotumia inaweza kuelezewa kama s/regex/string kuchukua nafasi/g, ambapo kirekebishaji cha s kinaonyesha operesheni ya kubadili, na kirekebisha g kinaonyesha kuwa uingizwaji wa kimataifa unapaswa kufanywa.

Kumbuka kuwa katika mfano huu, chaguo la -n lilitumiwa kuonyesha habari kuhusu operesheni inayofanywa (badala ya kufanya operesheni yenyewe, ambayo ni kubadili jina moja kwa moja la faili).

Kesi uingizwaji usiojali

Kirekebishaji kingine ambacho kinaweza kuwa muhimu ni kirekebishaji cha i. Mfano ulio hapa chini unaonyesha mbinu isiyojali kesi ya kubadilisha mfuatano na mfuatano mwingine.

paul@debian7:~/files$ ls file1.text file2.TEXT file3.txt paul@debian7:~/files$ rename "s/.text/.txt/i" * paul@debian7:~/files$ ls faili1. txt file2.txt file3.txt paul@debian7:~/files$

Kumbuka kuwa ishara ya dola ndani ya usemi wa kawaida huashiria mwisho wa mstari. Bila ishara ya dola, amri hii inapaswa kushindwa wakati wa kuchakata jina la faili kweli.txt.txt.

sed shirika

Mhariri wa Mtiririko wa data

Kihariri cha mtiririko, au sed kwa kifupi, hutumia misemo ya kawaida kurekebisha mtiririko wa data.

Katika mfano huu, matumizi ya sed hutumiwa kuchukua nafasi ya kamba.

mwangwi Jumatatu | sed "s/Jumatatu/Jumanne/" Jumanne

Mikwaju inaweza kubadilishwa na wahusika wengine, ambayo inaweza kuwa rahisi zaidi na kuboresha usomaji wa amri katika baadhi ya matukio.

mwangwi Jumatatu | sed "s:Mon:Tue:" Jumanne echo Jumatatu | sed "s_Monday_Tue_" Jumanne mwangwi Jumatatu | sed "s|Jumatatu|Jumanne|" Jumanne

Mhariri mwingiliano

Ingawa sed imeundwa kwa usindikaji wa mtiririko, inaweza pia kutumika kwa usindikaji wa mwingiliano wa faili.

paul@debian7:~/files$ echo Jumatatu > leo paul@debian7:~/files$ paka leo Jumatatu paul@debian7:~/files$ sed -i "s/Mon/Tue/" leo paul@debian7:~/files $ paka leo Jumanne

Herufi ya ampersand inaweza kutumika kurejelea kamba iliyotafutwa (na kupatikana).

Katika mfano huu, ampersand hutumiwa kuongeza mara mbili idadi ya mistari iliyopatikana.

mwangwi Jumatatu | sed "s/Monday/&&/" MondayMonday echo Monday | sed "s/jina la utani/&&/" Jumatatu

Mabano hutumiwa kupanga sehemu za usemi wa kawaida ambao unaweza kurejelewa baadaye.

Fikiria mfano ufuatao: paul@debian7:~$ echo Jumapili | sed "s_\(Sun\)_\1ny_" Jumapili paul@debian7:~$ echo Jumapili | sed "s_\(Sun\)_\1ny \1_" Jumapili yenye jua

Nukta kuashiria mhusika yeyote

Katika usemi wa kawaida, herufi rahisi ya nukta inaweza kuwakilisha mhusika yeyote.

Mfano huu hutafuta ulimwenguni mfuatano wa herufi za nafasi (\s) na kuzibadilisha na herufi 1 ya nafasi.

paul@debian7:~$ echo -e "leo\twarm\tday" leo ni siku ya joto paul@debian7:~$ echo -e "leo\twarm\tday" | sed "s_\s_ _g" leo ni siku ya joto

Matukio ya hiari

Alama ya alama ya kuuliza inaonyesha kuwa herufi iliyotangulia ni ya hiari.

Mfano ulio hapa chini hutafuta mfuatano wa herufi tatu o, na o ya tatu ikiwa ya hiari.

paul@debian7:~$ paka list2 ll lol lool loool paul@debian7:~$ grep -E "ooo?" list2 lool loool paul@debian7:~$ paka orodha2 | sed "s/ooo\?/A/" ll lol lAl lAl

Hasa n marudio

Unaweza kutaja idadi kamili ya marudio ya mhusika aliyetangulia.

Mfano huu hutafuta mifuatano iliyo na herufi o tatu haswa.

paul@debian7:~$ paka list2 ll lol lool loool paul@debian7:~$ grep -E "o(3)" list2 loool paul@debian7:~$ paka orodha2 | sed "s/o\(3\)/A/" ll lol lool lAl paul@debian7:~$

Kutoka n hadi m marudio

Na katika mfano huu, tunaonyesha wazi kwamba ishara lazima irudiwe kutoka kwa kiwango cha chini (2) hadi idadi ya juu (3) ya nyakati.

paul@debian7:~$ paka list2 ll lol loool paul@debian7:~$ grep -E "o(2,3)" list2 lool loool paul@debian7:~$ grep "o\(2,3\)" list2 lool loool paul@debian7:~$ paka orodha2 | sed "s/o\(2,3\)/A/" ll lol lAl lAl paul@debian7:~$