SED Tutorial Basic Substitution Linux Shell BASH
Sisällysluettelo:
- Grep-komennon syntaksi
- Kuinka käyttää
grep
hakemaan merkkijonoa tiedostoista - Käännä ottelu (sulje pois)
- Kuinka käyttää Grepiä merkkijonon etsimiseen komentoulostulossa
- Rekursiivinen haku
- Näytä vain tiedostonimi
- Kirjainkoolla merkityksetön haku
- Hae kokonaisia sanoja
- Näytä rivinumero
- Count ottelut
- Etsi useita merkkijonoja (kuvioita)
- Hiljainen tila
- Perussäännöllinen lauseke
- Laajennetut säännölliset lausekkeet
- Tulosta linjat ennen ottelua
- Tulosta rivit ottelun jälkeen
- johtopäätös
grep
komento, joka tarkoittaa ”globaalia säännöllisen lausekkeen tulostusta”, on yksi tehokkaimmista ja yleisimmin käytetyistä komennoista Linuxissa.
Grep etsii yhtä tai useampaa syöttötiedostoa riviltä, jotka vastaavat annettua mallia, ja kirjoittaa jokaisen vastaavan rivin vakiotulosteeseen. Jos tiedostoja ei määritetä,
grep
lukee normaalitulosta, joka on yleensä toisen komennon lähtö.
Tässä opetusohjelmassa me näytämme kuinka
grep
komentoa käytetään käytännön esimerkkien avulla ja yksityiskohtaiset selitykset yleisimmistä GNU
grep
vaihtoehdoista.
Grep-komennon syntaksi
Ennen kuin aloitamme
grep
komennon käytön, aloitamme tarkistamalla perussintaksi.
grep
ovat seuraavassa muodossa:
grep PATTERN
Hakasulkeissa olevat tuotteet ovat valinnaisia.
-
OPTIONS
- nolla tai enemmän vaihtoehtoja. Grep tarjoaa useita vaihtoehtoja, joilla hallitaan sen käyttäytymistä.PATTERN
- Hakukuvio.FILE
- nolla tai enemmän sisääntulotiedostonimiä.
Jotta tiedostoa voidaan hakea, komentoa ajavalla käyttäjällä on oltava lukuoikeus tiedostoon.
Kuinka käyttää
grep
hakemaan merkkijonoa tiedostoista
grep
komennon perusteellisin käyttö on merkkijonon (tekstin) etsiminen tiedostosta.
Esimerkiksi, jos haluat näyttää rivit
/etc/passwd
tiedostosta, joka sisältää merkkijono
bash
voit käyttää seuraavaa komentoa:
grep bash /etc/passwd
Lähdön tulisi näyttää noin:
root:x:0:0:root:/root:/bin/bash linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Jos merkkijono sisältää välilyöntejä, sinun on liitettävä se yksittäisiin tai kaksinkertaisiin lainausmerkkeihin:
grep "Gnome Display Manager" /etc/passwd
Käännä ottelu (sulje pois)
Jos haluat näyttää rivit, jotka eivät vastaa kuviota, käytä
-v
(tai
--invert-match
) -vaihtoehtoa.
Esimerkiksi näyttääksesi
/etc/passwd
tiedoston rivit, jotka eivät sisällä merkkijonoa
nologin
voit käyttää seuraavaa komentoa:
grep -v nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash colord:x:124:124::/var/lib/colord:/bin/false git:x:994:994:git daemon user:/:/usr/bin/git-shell linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Kuinka käyttää Grepiä merkkijonon etsimiseen komentoulostulossa
Syöttötiedostojen määrittämisen sijasta voit liittää toisen komennon tulosteen
grep
ja näyttää sitten vain tietyn mallin mukaiset rivit.
Esimerkiksi selvittääksesi, mitkä prosessit ovat käynnissä järjestelmässäsi käyttäjän
www-data
voit käyttää seuraavaa
ps
komentoa:
ps -ef | grep www-data
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
Voit ketjuttaa useita putkia myös komennossa. Kuten yllä olevasta tuotosta voidaan nähdä, siellä on myös rivi, joka sisältää
grep
prosessin. Jos et halua, että rivi näkyy, siirrä lähtö toiseen
grep
esiintymään, kuten alla on osoitettu.
ps -ef | grep www-data | grep -v grep
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
Rekursiivinen haku
Voit hakea kuvion rekursiivisesti käyttämällä
-r
vaihtoehtoa (tai -
--recursive
). Tämä etsii kaikkia määritetyn hakemiston tiedostoja ohittaen rekursiivisesti kohdatut linkit. Seuraa kaikkia symbolisia linkkejä käyttämällä
-R
vaihtoehtoa (tai -
--dereference-recursive
).
Seuraavassa esimerkissä etsimme merkkijonoa
linuxize.com
kaikista tiedostoista
/etc
hakemistossa:
grep -r linuxize.com /etc
Komento tulostaa vastaavat rivit, jotka on koottu täyteen polkuun tiedostoon.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com;
Jos sen sijaan
-r
käytät
-R
vaihtoehtoa,
grep
seuraa kaikkia symbolisia linkkejä:
grep -R linuxize.com /etc
Huomaa tulosteen viimeinen rivi. Tätä riviä ei tulosteta yllä olevassa esimerkissä, koska Nginxin
sites-enabled
hakemiston sisällä olevat tiedostot ovat linkkejä konfigurointitiedostoille
sites-available
hakemiston sisällä.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com; /etc/nginx/sites-enabled/linuxize.com: server_name linuxize.com www.linuxize.com;
Näytä vain tiedostonimi
Voit estää
grep
ja tulostaa vain vastaavien kuvioiden sisältävien tiedostojen nimet käyttämällä
-l
(tai
--files-with-matches
) -vaihtoehtoa.
Voit esimerkiksi etsiä kaikista tiedostoista, jotka päättyvät
.conf
tiedostoon nykyisessä työhakemistossa, ja tulostaa vain tiedostojen nimet, jotka sisältävät merkkijono
linuxize.com
tyypin:
grep -l linuxize.com *.conf
Tulos näyttää tältä:
tmux.conf haproxy.conf
-l
vaihtoehtoa käytetään yleensä yhdessä rekursiivisen vaihtoehdon
-R
:
Kirjainkoolla merkityksetön haku
Oletusarvon mukaan
grep
komento on kirjainkoko. Tämä tarkoittaa, että isoja ja pieniä merkkejä käsitellään erillisinä.
Voit ohittaa tapauksen etsiessäsi
-i
vaihtoehdolla (tai
--ignore-case
).
Esimerkiksi, kun etsit
Zebra
ilman vaihtoehtoa, seuraava komento ei näytä mitään tulosta, ts. On vastaavia rivejä:
grep Zebra /usr/share/words
Mutta jos suoritat kirjaimiin epäherkän haun käyttämällä
-i
vaihtoehtoa, se vastaa sekä isoja että pieniä kirjaimia:
grep -i Zebra /usr/share/words
Jos määrität ”Zebra”, se vastaa “zebra”, “ZEbrA” tai mikä tahansa muu kyseisen merkkijonon isojen ja pienten kirjainten yhdistelmä.
Hae kokonaisia sanoja
Kun etsit ”gnu”,
grep
tulostaa myös rivit, joihin “gnu” on upotettu suuremmilla sanoilla, kuten “cygnus” tai “magnum”.
grep gnu /usr/share/words
cygnus gnu interregnum lgnu9d lignum magnum magnuson sphagnum wingnut
Jos haluat palauttaa vain ne rivit, joissa määritetty merkkijono on koko sana (ei-sanamerkit suljettu), käytä
-w
(tai
--word-regexp
) -vaihtoehtoa.
az
,
AZ
ja
0-9
) ja alaviivat (
_
). Kaikkia muita merkkejä pidetään ei-sanallisina merkkeinä.
grep -w gnu /usr/share/words
Näytä rivinumero
Jos haluat näyttää rivien määrän, jotka sisältävät kuviota vastaavan merkkijonon, käytä
-n
(tai -
--line-number
) -vaihtoehtoa. Kun tätä vaihtoehtoa käytetään,
grep
tulostaa ottelut vakioulostuloon, jonka etulinjassa on rivinumero, josta se löytyi.
Esimerkiksi näyttääksesi rivit
/etc/services
tiedostosta, joka sisältää vastaavalla rivinumeroilla varustetun merkkijono
bash
voit käyttää seuraavaa komentoa:
grep -n 10000 /etc/services
Alla oleva tulos osoittaa meille, että ottelut löytyvät riveiltä 10423 ja 10424.
10423:ndmp 10000/tcp 10424:ndmp 10000/udp
Count ottelut
Voit tulostaa sopivien rivien määrän vakiotulosteeseen käyttämällä
-c
(tai
--count
) -vaihtoehtoa.
Seuraavassa esimerkissä lasketaan tilien lukumäärä, joissa
/usr/bin/zsh
on kuori.
grep -c '/usr/bin/zsh' /etc/passwd
Etsi useita merkkijonoja (kuvioita)
Kaksi tai useampia hakumalleja voidaan yhdistää TAI-operaattorilla
|
.
Oletuksena
grep
tulkitsee kuvion säännölliseksi peruslausekkeeksi, jossa metamerkit, kuten
|
menettävät erityisen merkityksensä, ja niiden alaviivaisia versioita on käytettävä.
Alla olevassa esimerkissä etsimme Nginx-lokitiedostojen kaikista sanoista
fatal
,
error
ja
critical
sanoja:
grep 'fatal\|error\|critical' /var/log/nginx/error.log
grep -E 'fatal|error|critical' /var/log/nginx/error.log
Hiljainen tila
-q
(tai
--quiet
) käskee
grep
tä olemaan kirjoittamatta mitään päätelaitteelle (vakiolähtö). Jos vastaavuus löytyy, komento poistuu tilassa
0
. Tämä on hyödyllistä, kun käytetään
grep
komentosarjoja komentosarjoissa, joissa haluat tarkistaa, sisältääkö tiedosto merkkijonoa, ja suorittaa tietty toiminto tuloksesta riippuen.
Tässä on esimerkki
grep
käytöstä hiljaisessa tilassa
grep
if
lauseessa:
if grep -q PATTERN filename then echo pattern found else echo pattern not found fi
Perussäännöllinen lauseke
GNU Grepillä on kaksi säännöllisen lausekkeen ominaisuusjoukkoa, Basic ja Extended. Oletuksena
grep
tulkitsee kuvion säännölliseksi peruslausekkeeksi.
Säännöllisessä peruslausekkeessa käytettynä kaikki muut merkit paitsi metamerkit ovat itse säännöllisiä lausekkeita, jotka vastaavat itseään. Alla on luettelo yleisimmin käytetyistä metamerkeistä:
-
Vastaa lauseketta rivin alussa
^
(caret) -symbolilla. Seuraavassa esimerkissä merkkijono^kangaroo
vastaa vain jos se esiintyy rivin alussa.grep "^kangaroo" file.txt
Käytä symbolia
$
(dollari) sovittaaksesi lauseen rivin loppuun. Seuraavassa esimerkissäkangaroo$
vastaa vain, jos se esiintyy rivin lopussa.grep "kangaroo$" file.txt
Käytä
.
(ajanjakso) -symboli, joka vastaa yhtä merkkiä. Esimerkiksi, jos haluat vastata jotain, joka alkaakan
sitten kaksi merkkiä ja päättyy merkkijonoonroo
, voit käyttää seuraavaa mallia:grep "kan..roo" file.txt
Käyttää
accept
tai ”accent
, voit käyttää seuraavaa mallia:grep "accet" file.txt
Käyttää
co(any_letter_except_l)a
, kutenco(any_letter_except_l)a
,cobalt
ja niin edelleen, mutta ei vastaa linjoja, jotka sisältävätcola
,grep "coa" file.txt
Voit välttyä seuraavan merkin erityisestä merkityksestä käyttämällä
\
(backslash) -merkkiä.
Laajennetut säännölliset lausekkeet
Voit tulkita kuvion laajennettuna säännöllisellä lausekkeella käyttämällä
-E
(tai
--extended-regexp
) -vaihtoehtoa. Laajennetut säännölliset lausekkeet sisältävät kaikki perusmetamerkit yhdessä ylimääräisten metamerkkien kanssa monimutkaisempien ja tehokkaampien hakumallien luomiseksi. Alla on esimerkkejä:
-
Sovita ja purkaa kaikki sähköpostiosoitteet annetusta tiedostosta:
grep -E -o "\b+@+\.{2, 6}\b" file.txt
Sovita ja purkaa kaikki kelvolliset IP-osoitteet annetusta tiedostosta:
grep -E -o '(25|2|??)\.(25|2|??)\.(25|2|??)\.(25|2|??)' file.txt
-o
asetusta käytetään vain vastaavan merkkijonon tulostamiseen.
Tulosta linjat ennen ottelua
Jos haluat tulostaa tietyn määrän rivejä ennen rivien sovittamista, käytä
-B
(tai -
--before-context
) -vaihtoehtoa.
Esimerkiksi, jos haluat näyttää viisi johtavaa kontekstiriviä ennen rivien sovittamista, käytä seuraavaa komentoa:
Tulosta rivit ottelun jälkeen
Jos haluat tulostaa tietyn määrän rivejä rivien sovittamisen jälkeen, käytä
-A
(tai
--after-context
) -vaihtoehtoa.
Esimerkiksi, jos haluat näyttää viisi jälkikontekstin riviä vastaavien rivien jälkeen, käyttäisit seuraavaa komentoa:
johtopäätös
grep
komennon avulla voit etsiä mallia tiedostoista. Jos vastaavuus löytyy, grep tulostaa määritetyn kuvion sisältävät rivit.
Grepistä voi oppia paljon lisää Grepin käyttöoppaan sivulta.
grep-pääteBCD- tai Boot Configuration Data -tiedosto on turva-arkaluonteinen tiedosto, joka on laiteohjelmistosta riippumaton tietokanta käynnistysajan konfigurointitiedoista. BitLocker-salauksen on toimittava synkronoituna BCD-tiedoston kanssa ja se varmistaa, että tiedosto on aina käyttäjän käynnistyessä.
Käytettäessä
Kuinka luoda tiedosto Linuxissa
Tässä opetusohjelmassa näytämme erilaisia tapoja luoda uusi tiedosto nopeasti Linuxissa komentorivin avulla. Uuden tiedoston luominen on tärkeä taito kaikille, jotka käyttävät Linuxia säännöllisesti.
Poista linkki linuxissa (poista tiedosto)
Tässä artikkelissa näytämme sinulle kuinka poistaa tiedosto GNU / Linux-järjestelmistä käyttämällä unlink-komentoa.