Sed, astfel încât rezultatul să nu fie afișat în terminal. Transmiterea sedului: utilizarea fluxurilor de text în Linux

Sed, astfel încât rezultatul să nu fie afișat în terminal. Transmiterea sedului: utilizarea fluxurilor de text în Linux

Document creat: 16.02.2010

Un alt fund

Pentru i în *.txt; do sed -i "/^\^/ s/^\^\([^\^]*\)\^\^/====\1====/;/^=/ s/$/ \n^ Comanda ^ Descriere ^/" $i; Terminat

Această secvență trece prin toate fișierele din catalogul de streaming ale căror nume se termină în .txt, adică:

    /^\^/ s/^\^\([^\^]*\)\^\^/====\1====/ – dacă rândul începe cu „^”, înlocuiți „^ Text ^ ^". la „==== Text ====";

    /^=/ s/$/ \n^ Comanda ^ Descriere ^/ - când rândul începe cu " = " (și începe, pentru că în paragraful anterior l-am creat noi înșine, iar aici avem un punct pentru a nu zgâriați alte rânduri), înlocuiți acest rând cu acesta, plus rotirea căruciorului, plus „^Comandă^Descriere^”. Altfel, se pare că după un astfel de rând, introduceți rândul „^ Command ^ Description ^”.

Pentru ce e asta? Axa este aici. Am împărțit un fișier dokuwiki lung cu comenzi Linux în alte fișiere. Duhoarea era vizibilă:

^ Analiză sisteme de fișiere^^ | badblocks -v /dev/hda1 | verificați partiția hda1 pentru prezența blocurilor dăunătoare...

Această secvență de comenzi le-a schimbat în tot:

Analiza sistemului de fișiere ==== ^ Comanda ^ Descriere ^ | badblocks -v /dev/hda1 | verificați partiția hda1 pentru prezența blocurilor dăunătoare...

Rând vizibil în spatele contextului

Pentru o serie suplimentară de cuvinte care să se potrivească cu contextul cântecului, puteți folosi următoarea construcție:

Sed -i "/^AUTO_SAVE/d" notes.ini

Această comandă din fișierul notes.ini șterge toate rândurile cu AUTO_SAVE.

Rând selectat sau numărul de rânduri dintr-un fișier

Pentru a selecta un singur rând sau mai multe rânduri dintr-un fișier, folosesc următoarea construcție:

Sed-i "2,1d"

Aceasta este comanda pentru fișier apare un alt rând.

Sed-i "5,10d"

Aceasta este comanda pentru fișier îndepărtați zece rânduri începând de la călcâi (inclusiv călcâiul).

Combinație de rânduri

Combinarea a două rânduri de rânduri în perechi

Combinați două rânduri în perechi, separând rotațiile căruciorului:

Cat /etc/hosts | sed "N;s/\n/ - /"

PS. Rozdilyuvach: „-”.

Convertit în litere mari sau mici

Majuscule:

Echo Sed | sed "s/.*/\U&/" SED

Litere mici:

Echo Sed | sed "s/.*/\L&/" sed

Elemente „Virizati” la flux

De exemplu, să luăm rezultatul săpăturii:

$dig ya.ru

aparent noi

; <<>> DiG 9.7.0-P1<<>> ya.ru;; Opțiuni globale: +cmd;; Am răspuns: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5252 ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;ya.ru. IN A ;; ANSWER SECTION: ya.ru. 4194 IN A 87.250.251.3 ya.ru. 4194 IN A 93.158.134.3 ya.ru. 4194 IN A 213.180.204.3 ya.ru. 4194 IN A 77.88.21.3 ya.ru. 4194 IN A 87.250.250.3 ;; Query time: 0 msec ;; SERVER: 192.168.2.9#53(192.168.2.9) ;; WHEN: Wed Nov 10 14:33:37 2010 ;; MSG SIZE rcvd: 103

iar viconavii:

Dig ya.ru | sed "0,/RĂSPUNS SECȚIUNE:/d; /^$/q"

Ya.ru. 4160 IN A 93.158.134.3 ya.ru. 4160 IN A 213.180.204.3 ya.ru. 4160 IN A 77.88.21.3 ya.ru. 4160 IN A 87.250.250.3 ya.ru. 4160 IN A 87.250.251.3

    0,/SECȚIUNEA RĂSPUNS:/d - afișează toate rândurile fluxului de la primul până la rândul în care apare „SECȚIUNEA RĂSPUNS:”, inclusiv

    /^$/q - rândul gol este strâns puternic, împingeți tăierea mai departe.

fundul 1

Preparare:

Cat /etc/passwd > ./test

SEDDescriere
cat./test | sed -e "s/systemd/SysV/g; s/Management/Unmanaged/"Aplicați două înlocuitoare pe rândul de piele
cat./test | sed -n "s/systemd/SysV/p"Adăugați mai multe rânduri de înlocuit. -n - suprimă textul normal.
cat./test | sed "s/systemd/SysV/w ./out"Introduceți înlocuitor pentru fișierul scos
cat./test | sed "41s/systemd/SysV/"Faceți un înlocuitor în rândul 41
cat./test | sed "41.44s/systemd/SysV/"Înlocuiți rândurile de la 41 la 44 inclusiv.
cat./test | sed "41,$s/systemd/SysV/"Efectuați înlocuirea în rândurile 41 până la restul inclusiv.
cat./test | sed "/games/,/syslog/ s!/usr/sbin/nologin!/bin/bash!"Faceți o modificare în rândurile care sunt situate între rânduri, astfel încât jocurile și syslogul să fie incluse
cat./test | sed "1c\ȘTERS"Înlocuiți primul rând complet
cat./test | sed "1.5c\ȘTERS"Înlocuiți rândurile de la 1 la 5 cu text
cat./test | sed "y!:/!;\\!"Înlocuiți „:” cu „;”, și „/” cu „\”
cat./test | sed "="Introduceți numerele rândurilor
cat./test | sed -n "/systemd/="Introduceți numărul de rânduri pentru care există o secvență
Inserați în flux în loc de fișier (out):
cat./test | sed "1rout"după 1 rând
cat./test | sed "$r out"după rândul rămas
cat./test | sed "1.4rout"după 1, 2, 3 și 4 rânduri
cat./test | sed "/syslog/r out"După rând, ce să faci cu syslog
Rânduri de vitalitate:
cat./test | sed "/jocuri/,/syslog/d"ce se găsește între rânduri, care include jocuri și syslog
cat./test | sed "3.5d"z 3 până la 5
cat./test | sed "5,$d"de la 5 până la capăt

Sed este un instrument ușor (binarul are doar 128 de kiloocteți) și un instrument la îndemână de procesare a textului.

În acest articol voi oferi o serie de exemple simple de vikoristan sed Să învățăm despre capacitățile sale de bază.

Sed preia fluxul de date de intrare sau fișierul într-un rând, editează rândul conform regulilor definite în scriptul sed și apoi tipărește rezultatul. Sed ce turing-povna mov programare.

formatul de comandă sed

Comanda sed are formatul:

sed [ -n ] [ -e script ] [ -f fișier script ] [ fișiere ]

Prapor -nîndoaie coroana
-e- Indică o listă de instrucțiuni, sarcini în linia de comandă.
-f- Indică locația fișierului script.

Editați formatul comenzii

Fișierul script constă dintr-un set de comenzi:

[ adrese [ , adrese ] ] comanda [ args ]

câte unul în fiecare rând.
Adresele sunt fie numere de rând, fie caractere speciale, fie expresii regulate:

$ - rândul rămas
cob~N- Pielea N- Sunt într-un rând, începând de la număr ştiulete
/regular_viraz/- Rânduri de plantat sub regula_viraz
Aplica:

1~2 - Jupui un alt rând /REGEXP/- toate rândurile în care există îngustare /REGEXP/ 10,20 - rândurile de la 10 la 20 10,+10 - rândurile de la 10 la 20 5,~N- rânduri începând de la al 5-lea până la primul, multiple N 5,/REGEXP/- rânduri pentru a se răzbuna /REGEXP/, după a 5-a (fără a include a 5-a)
  • Dacă adresa nu este specificată, toate rândurile sunt eliminate.
  • Dacă este introdusă o singură adresă, va apărea ultimul rând
  • Dacă sunt specificate două adrese, rândurile sunt selectate în intervalele specificate.
  • !echipă- Vikonuetsya echipă pentru rândurile care nu au fost selectate pentru adrese.

Comenzi de bază

Să aruncăm o privire la comenzile principale:

[se adresează] unui text- adăugați un nou rând cu text după rândul desemnat

$cat sed_test sed_test_1 11111 sed_test_2 22222 sed_test_3 33333 $ sed -e "2 a new_line" sed_test sed_test_1 11111 sed_test_2 22222 new_line sed

[adrese [, adrese]] c text- Șterge rândurile selectate și le înlocuiește cu text

$ sed -e "2 з new_line" sed_test sed_test_1 11111 new_line sed_test_3 33333 $ sed -e "/3/ з new_line" sed_test sed_test_1 11111 sed_test_2 22222 new_

[adrese [, adrese]] d- Afișează rândurile alocate.

$ sed -e "2 d" sed_test sed_test_1 11111 sed_test_3 33333 $ sed -e "2! d" sed_test sed_test_2 22222

[adrese] i text- Pastă text la locul rândului indicat.

$ sed -e "2 i new_line" sed_test sed_test_1 11111 text_nou sed_test_2 22222 sed_test_3 33333

[adrese [, adrese]] p(cu steagul -n) afișează rânduri cunoscute.

$ sed -ne "2p" sed_test sed_test_2 22222

[adrese] q- Ieși din sed.

[adrese [, adrese]] fișier r- Citind fişier ea își vede locul la ieșire.

[adrese [, adrese]] s/regular_viraz/zamina/prapori- A inlocui regula_viraz pe înlocuire- din regulamentele insignelor:

  • g - în fiecare rând
  • i - fără reglare a registrului
  • p - afișează rezultatul înlocuirii
$ sed -ne "s/t/T/g" sed_test sed_TesT_1 11111 sed_TesT_2 22222 sed_TesT_3 33333 $ sed -e "s//d/g" sed_test sed_test_d ddddd sed_test_d

[adrese [, adrese]] y/row1/row2/- Înlocuiește toate caracterele introduse cu rândul 1 simboluri subordonate cu rânduri 2. Rândurile Dovzhin sunt rupte, dar încă noi.

$ sed -ne "y/est/EST/g" sed_test SEd_TEST_1 11111 SEd_TEST_2 22222 SEd_TEST_3 33333

[adrese [, adrese]] (comandă)- armele sunt grupate după comandă
[adrese] =- Afișează numerele de rând

Mitki

: marcă- configurați grupuri de comenzi marcă
marca b marcă, yakscho marcă Tranziție zilnică la sfârșitul fișierului de comandă.

marca t- mergeți la comanda marcată cu o etichetă marcă numai după înlocuirea ulterioară a unei alte echipe s///

Ciclul Viconnanny

sed operează cu două buffere de date: cel principal și cel auxiliar. Pentru moment, tampoanele sunt goale.
Lucrul cu aceste buffer-uri necesită comenzi suplimentare: \'h', `H', `x', `g', `G' `D' h- Înlocuiți tamponul secundar în locul celui principal
H- Adăugați un nou rând în bufferul auxiliar și apoi adăugați un nou rând în locul bufferului principal la cel auxiliar
X- Amintiți-vă în loc de ambele buffer-uri pe secundă
g- Înlocuiți tamponul principal cu cel secundar
G- Adăugați un nou rând în bufferul principal și apoi adăugați, în loc de un buffer suplimentar, la cel principal
D- Vizibilitatea textului tampon principal la simbolul rândului următor
N- Adăugați un nou rând în tamponul principal, apoi adăugați acolo următorul rând care se formează
P- Introduceți în locul tamponului principal simbolul de inversare a rândului.

Stocuri pliante mai mari

Următorul script înlocuiește rândurile fișierului (primele rânduri devin cele rămase)

$ cat tac.sed #!/usr/bin/sed -nf # Începând de la un alt rând, în locul unui buffer (care conține deja # toate rândurile din față) este adăugat la rândul de flux. 1! G # când se ajunge la rândul rămas - alt $ p # Datele sunt introduse din nou în buffer h sed -nf tac.sed sed_test sed_test_3 33333 sed_test_2 22222 sed_test_1 11111

Rândurile din fișier sunt importante (este afișat numărul rândului rămas)

$cat count.sed #!/usr/bin/sed -nf $=

rezultat

$ sed -nf count.sed sed_test 3

Versiunea rândurilor

$ cat revers.sed #!/usr/bin/sed -f # omite rândurile cu aceleași litere /../! b # Întoarcem rândul. Este furnizat într-un rând gol înainte și după rândul în linie. s/%$@~*!G4;:%#`.*$/\ &\ / # Primul caracter este transferat la sfârșit # ciclul continuă până când există caractere în rândul din mijloc. tx:x s/\(\\n.\)\(.*\)\(.\\n\)/\3\\2\\1/ tx #ordinea de mutare a rândurilor este vizibilă s/\\n/ / g

Acest script mută două litere simultan.

$ sed -f revers.sed sed_test 11111 1_tset_des 22222 2_tset_des 33333 3_tset_des

Informații suplimentare

Puteți afla mai multe despre formatul scripturilor sed citind manualul man sed sau documentație tehnică info sed.

Editorul de flux sed este non-interactiv editor de text, care reprezintă operații asupra datelor care provin de la intrarea standard într-un fișier. Sed editează informații aleatoriu.

Au fost descrise elementele de bază ale lucrului cu editorul sed. Acest servitor danez se bucură de mai multe impulsuri.

Integrarea echipei

Uneori este nevoie să trimiteți un număr de comenzi către editorul sed în același timp. Există multe moduri de a încerca.

Dacă nu aveți deja un fișier de testare pentru lucrul cu sed, creați acesta:

CD
cp /usr/share/common-licenses/BSD .
cp /usr/share/common-licenses/GPL-3 .
ecou „acesta este cântecul care nu se termină niciodată


neştiind ce era

doar pentru că..." > enervant.txt

Deoarece sed funcționează cu intrare și ieșire standard, puteți pur și simplu să tastați diferite comenzi sed simultan pe un rând:

sed "s/and/\&/" enervant.txt | sed "s/oameni/cai/"

da, merge mai departe, prietene
niște cai au început să o cânte
neştiind ce era
Și vor continua să o cânte pentru totdeauna
doar pentru că...

Această metodă asigură că câteva clicuri pe sed vor crea o solicitare de atenție, vor ocupa mai mult spațiu și nu vor interfera cu potențialul sedului.

Puteți trimite imediat o listă de comenzi către sed folosind opțiunea suplimentară -e, care trebuie introdusă înaintea comenzii:

sed -e "s/and/\&/" -e "s/people/horses/" annoying.txt

De asemenea, puteți combina comenzile într-un rând în spatele simbolului suplimentar de pete cu comă. Această metodă funcționează în același mod ca cea anterioară.

sed "s/and/\&/;s/people/horses/" enervant.txt

Pentru a restabili respectul: cu un design vicios, este nevoie de a separa picioarele individuale și cu un punct vicios în care toate comenzile pot fi înfășurate în aceleași picioare.

Acestea sunt două moduri de a introduce manual mai multe comenzi într-o oră și de a evita problemele dacă trebuie să selectați o serie simplă de comenzi.

De asemenea, ar trebui să vă familiarizați cu operatorul =. Acest operator inserează un număr de rând între fiecare rând. Rezultatul arată astfel:

sed "=" enervant.txt
1
acesta este cântecul care nu se termină niciodată
2
da, merge mai departe, prietene
3
unii oameni au început să-l cânte
4
neştiind ce era
5
și vor continua să o cânte pentru totdeauna
6
doar pentru că...

Acum încercați să editați textul pentru a înțelege cum se schimbă formatul de numerotare.

G după ungere, adăugați un rând gol între rândurile deja goale.

sed "G" enervant.txt
_
acesta este cântecul care nu se termină niciodată
_
da, merge mai departe, prietene
_
unii oameni au început să-l cânte
_
neştiind ce era
_
și vor continua să o cânte pentru totdeauna
_
doar pentru că...

Încercați să combinați două echipe. S-ar putea să vă întrebați chiar acum că aceste comenzi sunt afișate deoarece există un rând gol între rândul de text și rândul de numere. Cu toate acestea, simbolul arată astfel:

sed "=; G" enervant.txt
1
acesta este cântecul care nu se termină niciodată
_
2
da, merge mai departe, prietene
_
3
unii oameni au început să-l cânte
_
4
neştiind ce era
. . .
. . .

Aceasta înseamnă că operatorul = modifică fluxul de ieșire (aceasta înseamnă că nu este posibil să eliminați notele pentru editare ulterioară).

Puteți ocoli două apeluri sed, în care primul apel este tratat ca un simplu flux de text pentru celălalt.

sed "=" enervant.txt | sed "G"
1
_
acesta este cântecul care nu se termină niciodată
_
2
_
da, merge mai departe, prietene
_
3
_
unii oameni au început să-l cânte
. . .
. . .

Vă rugăm să fiți conștienți de faptul că fiecare echipă funcționează într-un mod similar, mai ales dacă combinați mai multe echipe și dezvoltați din nou în același lucru.

Adresarea blocată

Unul dintre avantajele comenzilor sed este că acceptă adresarea și că pot fi evaluate în mod regulat pe baza unor criterii. Aceasta înseamnă că puteți lucra cu fișiere care nu vă sunt cunoscute în mod special.

sed "1,3s/.*/Bună ziua/" enervant.txt
Buna ziua
Buna ziua
Buna ziua
neştiind ce era
și vor continua să o cânte pentru totdeauna
doar pentru că...

Este posibil să schimbați modelul obișnuit pentru a înlocui rândul pentru a înlocui modelul obișnuit. Pentru a face acest lucru, trebuie să plasați modelul de căutare între două bare oblice (/) înainte de comandă.

sed "/singing/s/it/& tare/" enervant.txt
acesta este cântecul care nu se termină niciodată
da, merge mai departe, prietene
unii oameni au început să o cânte cu voce tare
neştiind ce era
și vor continua să o cânte cu voce tare pentru totdeauna
doar pentru că...

Al căror cuvânt folosește cu voce tare pentru a răzbuna primul în rândul de piele, pentru a răzbuna cuvântul cântând. Restabiliți respectul: celălalt și al patrulea rând s-au pierdut fără modificări, rămășițele nu se potrivesc cu modelul.

Adresarea expresiilor poate fi simplificată. Este o idee bună să dai comenzi celor mici.

Capul ofensiv demonstrează cum să vikorizați expresiile regulate pentru a crea o adresă pentru alte echipe. Această comandă pentru a găsi toate rândurile goale le arată:

sed "/^$/d" GPL-3
LICENȚĂ PUBLICĂ GENERALĂ GNU
Versiunea 3, 29 iunie 2007
Drepturi de autor (C) 2007 Free Software Foundation, Inc.
Toată lumea are voie să copieze și să distribuie copii textuale
a acestui document de licență, dar modificarea acestuia nu este permisă.
Preambul
Licență publică generală GNU - fără costuri, licență copyleft pt
. . .
. . .

Vă rugăm să rețineți că expresiile regulate pot fi diferite în orice parte a intervalului.

De exemplu, puteți vedea rânduri între rândurile START și END:

sed „/^START$/,/^END$/d” fișier de intrare

Vă rugăm să rețineți: această comandă șterge toate rândurile de la primul cuvânt START găsit până la primul cuvânt END găsit, iar dacă cuvântul START este în noul șir, veți continua să ștergeți datele.

Pentru a inversa adresarea (pentru a selecta rânduri care nu se potrivesc cu modelul), selectați semnul de grindină (!).

De exemplu, pentru a vedea orice rând de intrări, trebuie să introduceți:

sed "/^$/!d" GPL-3

Adresele nu sunt obligatorii, dar trebuie să fie pliate pentru a fi inversate. Inversarea funcționează exact așa cu propria sa numerotare.

Buffer de date suplimentare wiki

Buffer-ul suplimentar (hold buffer) mărește numărul de editări sed.

Bufferul suplimentar este o zonă în care se salvează timpul, care poate fi schimbată prin comenzile melodiilor.

Prezența acestui buffer suplimentar vă permite să salvați rânduri în timp ce lucrați pe alte rânduri.

Comenzi pentru roboți cu buffer:

  • h: copiază tamponul de procesare curent (rândul rămas din care procesați) în tamponul de adăugare.
  • H: Adaugă tamponul de procesare a fluxului la sfârșitul procesării suplimentare a fluxului, separându-le cu caracterul \n.
  • g: Copiază tamponul de ieșire din tamponul de procesare a fluxului. Tamponul frontal va fi irosit.
  • G: Adaugă șablonul de flux la memoria tampon de procesare a fluxului, separându-le cu caracterul \n.
  • x: Încarcă șablonul curent și tamponul de date suplimentar.

Nu este posibilă procesarea datelor suplimentare în locul bufferului de procesare, cu excepția cazului în care tamponul de procesare nu este mutat.

Să aruncăm o privire la stocul pliabil.

Încercați să conectați rândurile adiacente folosind o comandă ofensivă suplimentară:

sed -n "1~2h;2~2(H;g;s/\n/ /;p)" enervant.txt


Notă: Intr-adevar, pentru care sed pronunta comanda N; Cu toate acestea, pentru practică, merită să vă uitați la acest fund.

Opțiunea –n suprimă afișarea automată.

1~2h – valoarea adresei, care are ca rezultat înlocuirea ulterioară a fiecărui rând cu textul, începând de la primul (celălalt rând neîmperecheat). Comanda h copiază rândurile în tamponul de supliment.

Echipa Rashtu dus la brațe figurate. Aceasta înseamnă că această parte a comenzii va fi trimisă la adresa care a fost introdusă în mod specific. Fără aceste brațe, adresa va fi setată doar la comanda H, iar restul comenzilor vor fi pentru rândul de piele.

Desigur, comanda N a fost scrisă mai devreme, care este scurtă și simplă și returnează același rezultat:

sed -n "N;s/\n/ /p" enervant.txt
acesta este cântecul care nu se termină niciodată, da, continuă și continuă, prietene
unii oameni au început să o cânte fără să știe ce este
și vor continua să o cânte pentru totdeauna doar pentru că...

Scripti sed

Comenzile pot fi configurate într-un script. Acest lucru vă permite să combinați un întreg set de comenzi într-un singur șablon.

De exemplu, puteți scrie un script pentru a crea mesaje text simple care necesită formatare în prealabil.

Atunci nu va trebui să repeți în mod constant aceleași comenzi pentru conștientizarea pielii. Scriptul sed este o listă de comenzi pe care trebuie să le rulați pe un obiect.

De exemplu:

s/aceasta/aia/g
s/zăpadă/ploaie/g
1,5s/conă de pin/caisă/g

Apoi puteți face clic pe fișier:

sed -f sedScriptName fileToEdit

Visnovok

Acum cunoașteți metode mai avansate de lucru cu sed.

Voi nota comenzile sed pentru claritate, este ușor să te pierzi în ele. Este recomandat să experimentați cu ele, mai întâi testându-le pe date importante.

Etichete: ,
Autor: Rares Aioanei
Data publicării: 19 noiembrie 2011
Traducere: A. Krivoshey
Data traducerii: Lipen 2012

Mykola Ignatushko a verificat versiunea GNU sed 4.2.1 a distribuției Gentoo pentru toate comenzile, conform acestei statistici. Nu toate scripturile au funcționat bine pe versiunea GNU sed. În partea dreaptă era o bucată de lemn, de parcă ar fi fost îndreptată. Doar scenariul a trebuit să fie complet reelaborat prin înlocuirea dealului cu munți.

1. Introducere

Vă cerem cu amabilitate o altă parte a seriei noastre, care este dedicată sed, o versiune de GNU. Ne vom concentra pe o selecție de versiuni de sed disponibile pe diverse platforme, dar ne vom concentra pe GNU sed versiunea 4.x. Câți dintre voi simțiți despre sed, sau l-ați vikorizat deja, swed pentru orice ca un instrument de înlocuire. Acesta este doar unul dintre scopurile sed și vom încerca să vă arătăm toate aspectele acestui utilitar. Numele său înseamnă „Stream EDItor” și cuvântul „stream” la acest tip Poate însemna un fișier, un canal sau doar stdin. Sperăm că ai deja cunoștințe de bază despre Linux și dacă ai lucrat deja cu viruși obișnuiți sau dacă știi deja ce este, atunci totul va fi mult mai simplu pentru tine. Obligația statutului nu permite includerea în fața acestuia în afara kerivnitstvoîn spatele expresiilor regulate, vom schița și conceptele de bază și vom oferi un număr mare de aplicații ale vikoristan sed.

2. Instalare

Nu este nevoie de multe explicații aici. Pentru toate sed, aveți deja instalații, deoarece trebuie să utilizați diverse scripturi de sistem, precum și instrumente Linux, pentru că doriți să îmbunătățiți eficiența muncii dvs. Puteți afla ce versiune de sed ați instalat folosind următoarea comandă:

$sed --version

Pe sistemul meu, această comandă arată că, fără a instala GNU sed 4.2.1 plus, oferă instrucțiuni pentru pagina principala programe și alte informații relevante. Pachetul se numește „sed” indiferent de distribuție, cu excepția Gentoo, dar nu este explicit.

3. Concepte

Înainte de a merge mai departe, trebuie să subliniem cu atenție faptul că „sed” este folosit, deoarece sintagma „stream editor” are puțin de spus despre scopul său. sed acceptă textul ca intrare, selectează operațiunile specificate pe rândul de piele (dacă nu este specificat altfel) și trimite modificări ale textului. Operațiunile preconizate pot fi adăugarea, inserarea, ștergerea sau înlocuirea. Nu este atât de simplu pe cât pare: voi spune că există o mulțime de opțiuni și combinații care pot crea o comandă sed care este chiar important de înțeles. Prin urmare, vă recomandăm să învățați elementele de bază ale expresiilor regulate pentru a înțelege cum funcționează. Înainte de a începe procesul, am dori să mulțumim lui Eric Pement și altora pentru pregătire și pentru cei care au creat pentru toți cei care doresc să învețe și vikory sed.

4. Expresii regulate

Fragmentele comenzii sed (script) sunt un mister pentru mulți, dar credem că cititorii noștri sunt responsabili pentru înțelegerea conceptelor de bază și nu pentru copierea și lipirea orbește comenzile, a căror semnificație nu le înțeleg. Dacă o persoană dorește să înțeleagă ce sunt expresiile regulate, cuvânt cheieє „aspect” sau, mai precis, „șablon de aspect”. De exemplu, ai scris numele Nick pentru departamentul tău, devenind un arhitect moderat. Ale Nick este aici, iar în locul lui John este aici, acum trebuie să înlocuiți cuvântul Nick John. Dacă fișierul se numește report.txt, trebuie să introduceți următoarea comandă:

$ cat report.txt | sed "s/Nick/John/g" > report_new.txt

Dacă utilizați sed pentru a utiliza stdout, puteți utiliza operatorul de redirecționare a ieșirii așa cum se arată în aplicație. Acesta este un exemplu foarte simplu, dar am ilustrat o serie de puncte: găsim toate asemănările cu modelul Nick și îl înlocuim în toate variantele cu John. Este important ca sed să nu modifice registry, așa că asigurați-vă că întoarceți fișierul de ieșire pentru reconfigurare, astfel încât toate modificările să fi fost făcute. Indicațiile de mai sus ar putea fi scrise astfel:

$ sed "s/Nick/John/g" report.txt > report_new.txt

Bine, spuneți, unde este comunicarea regulată aici? Deci, am vrut să arătăm mai întâi fundul, iar acum începe ultima parte.
Dacă nu v-ați amintit, ați scris „nick” sau „Nick” și doriți să evitați orice ofensă, trebuie să utilizați comanda sed „s/Nick|nick/John/g”. Linia verticală a orezului este importantă pentru că știi că dacă ai tastat C, aspectul tău va arăta ca „nick” sau „Nick”. După cum vedeți mai jos, canalul poate fi abuzat în alte moduri, altfel același simț se va pierde. Alți operatori care sunt utilizați pe scară largă în expresiile regulate sunt „?”, care indică repetarea caracterului principal zero sau o dată (deci flavou?r va indica aromă și aromă), „*” - zero sau de mai multe ori, „+" - una sau mai multe ori. „^” indică începutul rândului, iar „$” indică începutul rândului. Yakshcho vi - koristuvach vi sau vim, veți ști o mulțime de discursuri. Toate aceste utilitare, împreună cu awk și C, se întorc la rădăcinile primelor zile ale UNIX. Nu vom vorbi mai departe pe această temă, pentru că este mai ușor de înțeles semnificația acestor simboluri pe butts, dar și să știm că există diferite implementări ale limbajelor obișnuite: POSIX, POSIX Extended, Perl, precum și diferite realități prețuri de viruși obișnuiți fuzzy care vă garantează o durere de cap bill.

5. Aplicați vikoristannya sed

Sintaxa comenzii Descriere

Sed "s/Nick/John/g" report.txt

Înlocuiește introducerea de skin Nick cu John în fișierul report.txt

Sed "s/Nick\|nick/John/g" report.txt

Înlocuiește pielea cu Nick sau Nick John.

Sed "s/^/ /" file.txt > file_new.txt

Adaugă 8 spații din stânga textului pentru a îmbunătăți puterea mâinii.

Sed -n "/Bineînțeles/,/atenție plătiți/p" fișierul meu

Introduceți toate paragrafele care încep cu „Desigur” și se termină cu „atenție pe care o acordați”.

Sed -n 12.18p file.txt

Introduceți numai rândurile 12-18 în fișierul file.txt

Sed 12,18d file.txt

Afișați întregul fișier.txt în spatele rândurilor de la 12 la 18
Inserează un rând gol după rândul skin al fișierului.txt

Sed -f script.sed file.txt

Scrie toate comenzile în script.sed și le salvează.

Sed "5!s/șuncă/brânză/" fișier.txt

Înlocuiește căpușa cu brânză în file.txt din spatele șurubului de al 5-lea rând

Adăugați fișierul „$d”.

Rândul rămas este vizibil

Sed -n „/\(3\)/p” fișier.txt

Un alt rând cu trei cifre consecutive

Seda „/boom/s/aaa/bb/” fișier.txt

Dacă se găsește „boom”, înlocuiți aaa cu bb

Adăugați „17,/disk/d” fișier.txt

Toate rândurile sunt vizibile, începând cu al 17-lea, până la „disc”. Deoarece există rânduri de la atela „disc”, îl puteți vedea pe primul.

Echo ONE TWO sed "s/one/unos/I"

Înlocuiește unul cu unos indiferent de registru, va fi etichetat „unos TWO”

Sed "G; G" fișier.txt

Inserează două rânduri goale după rândul skin al fișierului.txt

Adăugați fișierul „s/.$//” .txt

Metodă de înlocuire a dos2unix :). Zagaloul arată simbolul rămas pe rândul de piele.

Seda „s/^[ \t]*//” fișier.txt

Elimină toate golurile/filele din fața rândului de piele din file.txt

Seda „s/[ \t]*$//” fișier.txt

Elimină toate golurile/filele de la sfârșitul rândului skin din file.txt

Adăugați „s/^[ \t]*//;s/[ \t]*$//” fișier.txt

Elimină toate golurile/filele de pe cob și de la sfârșitul rândului de piele din file.txt

Sed "s/foo/bar/" fișier.txt

Înlocuiește foo cu bar în prima intrare din rând.

Sed "s/foo/bar/4" fișier.txt

Înlocuiește foo cu bar numai în a patra intrare din rând.

Sed "s/foo/bar/g" fișier.txt

Înlocuiește foo bar pentru toate intrările din rând.

Seda „/baz/s/foo/bar/g” fișier.txt

Înlocuiește foo cu bar, doar pentru a înlocui baz.

Afișat „/./,/^$/!d” fișier.txt

Strângeți toate rândurile goale ulterioare la unul singur. Rândul gol nu va rămâne aprins.

Afișat „/^$/N;/\n$/D” fișier.txt

Comprimați toate rândurile goale ulterioare la unul, altfel eliminați rândul gol de sus.

Seda „/./,$!d” fișier.txt

Scoateți toate rândurile goale de porumb

Sed -e:a -e „/^\n*$/($d;N;);/\n$/ba” fișier.txt

Îndepărtați toate rândurile goale înghețate

Sed -e:a -e "/\\$/N; s/\\n/ /; ta" file.txt

Dacă rândul se termină cu o stropire de poartă, conectați-l cu următorul (corect pentru scripturile shell)

Sed -n „/regex/,+5p” fișier.txt

Introduceți 5 rânduri după rând pentru a utiliza expresia regex

Sed "1~3d" fișier.txt

Vezi al treilea rând de piei, începând de la primul.

Sed -n „2~5p” fișier.txt

Desenați al cincilea rând de piele, începând de la celălalt.

Sed "s/ick/John/g" report.txt

O altă modalitate de a înregistra astfel de acțiuni în comparație cu alte aplicații. Îl poți înregistra pe al tău?

Sed -n „/RE/(p;q;)” fișier.txt

Un alt rând de la primul subtip de RE (virus obișnuit)

Seda „0,/RE/(//d;)” fișier.txt

Îndepărtează rândul din prima subdiviziune

Afișat „0,/RE/s//to_that/” fișier.txt

Schimbă prima impresie

Seda „s/^[^,]*,/9999,/” fișier.csv

Înlocuiește toate valorile din prima coloană a fișierului CSV cu 9999

S/^ *\(.*[^ ]\) *$/|\1|/; s/"*, */"|/g; : bucla s/| *\([^",|][^,|]*\) *, */|\1|/g;s/|*, */||/g; s/|*/|/g;s /^|\(.*\)|$/\1/;

Un script sed pentru conversia unui fișier CSV într-un fișier cu un rând vertical ca separator (funcționează numai cu diferite tipuri de CSV, cu picioare și comunicații introduse).

Fișierul „:a;s/\(^\|[^0-9.]\)\(\+\)\(\(3\)\)/\1\2,\3/g;ta" .TXT

Schimbă formatul numărului în file.txt de la 1234.56 la 1.234.56

Sed -r "s/\<(reg|exp)+/\U&/g"

Traduce orice cuvânt care începe cu reg sau exp în majuscule.

Seda „1.20 s/Johnson/White/g” fișier.txt

Acum este posibil să înlocuiți Johnson cu juninci albe în rândurile 1 - 20.

Seda „1.20 !s/Johnson/White/g” fișier.txt

Partea din față este ascunsă (înlocuiește tăietura, cu excepția rândurilor 1-20)

Adăugați „/de la/,/până la/ ( s/\ltred\>/magenta/g; s/<blue\>/cyan/g; )” fișier.txt

Înlocuiește între „de la” și „până”. În ceea ce privește zonele „de la” - „până”, este înlocuită cu pielea acestora.

Afișat „/ENDNOTES:/,$ ( s/Schaff/Herzog/g; s/Kraft/Ebbing/g; )” file.txt

Înlocuiește numai cuvintele „NOTE FINALE:” și până la EOF

Seda „/./(H;$!d;);x;/regex/!d” fișier.txt

Celălalt paragraf este mai puțin probabil să conțină expresii regex

Sed -e "/./(H;$!d;)" -e "x;/RE1/!d;/RE2/!d;/RE3/!d" fișier.txt

Alte paragrafe nu miros a RE1, RE2 și RE3. Ordinea RE1, RE2 și RE3 nu contează.

Fișier „s/14”/paisprezece inci/g.txt

Așa poți scăpa de picioare

Adăugați „s/\/some\/UNIX\/path/\/a\/new\/path/g” file.txt

Lucrul cu Unix Ways

Sed "s///g" fișier.txt

Elimină toate caracterele începând de la a la g din fișierul file.txt

Seda „s/\(.*\)foo/\1bar/” fișier.txt

Înlocuiește doar tipul de rând rămas foo cu bară

Sed "1!G;h;$!d"

Înlocuirea comenzii tac

Sed "/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//"

Înlocuirea comenzii rev

Sed 10q fișier.txt

Înlocuirea comenzii capului

Sed -e:a -e „$q;N;11,$D;ba” fișier.txt

Înlocuirea comenzii de coadă

Afișat „$!N; /^\(.*\)\n\1$/!P; D” fișier.txt

Înlocuirea comenzii uniq

Afișat „$!N; s/^\(.*\)\n\1$/\1/;t; D” fișier.txt

Comanda de returnare (echivalent cu uniq-d)

Afișat „$!N;$!D” fișier.txt

Echivalent cu coada -n 2

Sed -n „$p” fișier.txt

... coada -n 1 (sau coada -1)

Seda „/regexp/!d” fișier.txt

Echivalent cu grep

Sed -n „/regexp/(g;1!p;);h” fișier.txt

Există un alt rând care vine înaintea primului subtip al virusului obișnuit, dar nu include subtipul în sine

Sed -n „/regexp/(n;p;)” fișier.txt

Există un alt rând care vine după primul subtip al virusului obișnuit și nu include subtipul în sine

Sed "/pattern/d" fișier.txt

Afișează rândurile care se potrivesc cu modelul

Sed "/./!d" fișier.txt

Șterge toate rândurile goale din fișier

Afișat „/^$/N;/\n$/N;//D” fișier.txt

Comprimă toate rândurile goale ulterioare în două rânduri goale. Rândurile individuale goale nu vor fi înlocuite.

Sed -n „/^$/(p;h;);/./(x;/./p;)” fișier.txt

Eliminarea rândului rămas al paragrafului skin
Eliminați titlul foii. Cu alte cuvinte, totul este vizibil după primul rând gol.

Ultima dată am vorbit despre funcțiile din scripturile bash, zokrem, despre cum să le apelăm Linie de comanda. Subiectul nostru de azi este unealtă maro pentru procesarea datelor de rând - un utilitar Linux numit sed. Folosim adesea texte pentru a lucra cu texte care pot arăta ca fișiere jurnal, fișiere de configurare și alte fișiere.



Dacă colectați date în scripturi bash, nu veți fi familiarizat cu instrumentele sed și gawk. Aici ne concentrăm pe sed și pe lucrul cu texte, care este o lecție foarte importantă în călătoria noastră prin întinderile nesfârșite ale dezvoltării scripturilor bash.

Acum vom trece peste elementele de bază ale lucrului cu sed și, de asemenea, vom analiza mai mult de trei duzini de aplicații ale acestui instrument.

Bazele roboților sed

Utilitarul sed se numește editor de text în flux. În editoarele de text interactive, folosind simbolul nano, lucrați cu texte, utilizați tastatura, editați fișiere, adăugați, ștergeți sau modificați texte. Sed vă permite să editați fluxuri de date pe baza setului de reguli specificate de dezvoltator. Axa arată ca diagrama acestei comenzi:

fișier de opțiuni $sed
Pentru promochanny sed stagnează intrarea atunci când faceți clic pe o regulă, exprimată ca un set de comenzi, până la STDIN. Acest lucru vă permite să transferați date direct către sed.

De exemplu, așa:

$ echo „Acesta este un test” | sed "s/test/alt test/"
Acesta va fi sfârșitul dispariției acestei echipe.


Îmi pare rău pentru Wikliku sed

În acest caz, sed înlocuiește cuvântul „test” din rândul trecut pentru procesare cu cuvintele „alt test”. Pentru a oficializa regulile de editare a textului plasat în file, se folosesc bare oblice. Widgetul nostru are o comandă precum s/pattern1/pattern2/. Litera „s” este o scurtare a cuvântului „înlocuitor”, așa că avem o comandă de înlocuire. Sed, terminând această comandă, uită-te la text și înlocuiește fragmentele găsite în cel nou (vom vorbi despre cele mai jos) care seamănă cu pattern1 cu pattern2.

Ghidarea este un cap mai primitiv al sedului, necesar pentru a vă prezenta cursul. De fapt, sed poate fi folosit în multe scenarii mai complexe de procesare a textului, de exemplu, pentru lucrul cu fișiere.

Sub citiri se află fișierul în care se află fragmentul de text și rezultatele prelucrării acestuia cu următoarea comandă:

$ sed "s/test/alt test" ./fișierul meu


Fisier text ta rezultatele lui yogo obrobki

Aici este pusă laolaltă aceeași abordare pe care am vikorizat-o mai devreme, dar acum sed colectează textul care este salvat în fișier. În acest caz, dacă fișierul este mare, puteți observa că sed prelucrează datele în porțiuni și afișează ceea ce este colectat pe ecran fără a procesa întregul fișier.

Sed nu modifică datele din fișierul pe care îl editează. Editorul citește fișierul, rezumă ceea ce a fost citit și trimite rezultatul la STDOUT. Pentru a sări în ce Fisier de iesire nu sa schimbat, suficient, după aceea, ca și în transferul de sed, deschideți-l. Dacă trebuie să actualizați sed, puteți redirecționa fișierul sau poate suprascrie fișierul vechi. Dacă sunteți familiarizat cu unul dintre materialele anterioare din această serie, care se ocupă cu redirecționarea fluxurilor de intrare și ieșire, puteți beneficia în general de acest lucru.

Vykonannya seturi de comenzi sub ora apelului sed

Pentru a căuta multe acțiuni cu date, utilizați tasta -e sub comanda sed. De exemplu, cum să organizați înlocuirea a două fragmente de text:

$ sed -e "s/This/That/; s/test/alt test/" ./myfile


Vikoristannya cheie -e sub oră vikliku sed

Până la următorul rând de text din fișier, sunt folosite comenzi ofensive. Ele trebuie separate printr-un punct cu un punct, astfel încât între finalizarea comenzii și punctul cu un punct să nu fie nevoie să săriți.
Pentru a introduce mai multe modele de procesare a textului când faceți clic pe sed, puteți, după ce ați introdus primul singur picior, să apăsați Enter, apoi să introduceți regula skin dintr-un rând nou, fără a uita de piciorul care se închide:

$ sed -e " > s/This/That/ > s/test/alt test/" ./myfile
Ceea ce va ieși după aceea este că echipa este prezentată de parcă ar fi fost Vikonan.


Un alt mod de a lucra cu sed

Citirea comenzilor dintr-un fișier

Deoarece nu există comenzi sed care trebuie să analizeze textul, cel mai bine este să le scrieți mai întâi într-un fișier. Pentru a introduce un fișier sed care va rula comenzi, utilizați tasta -f:

Axis în loc de fișierul mycommands:

S/Acest/Aceasta/ s/test/alt test/
Apelăm sed, trecând fișierul editorului cu comenzi și un fișier pentru procesare:

$ sed -f comenzile mele fișierul meu
Rezultatul la apelarea unei astfel de comenzi este similar cu cel obținut de la butts din față.


Fișier Vikoristan cu comenzi sub oră wikliku sed

Comenzile Prapori înlocuiesc

Este important să te minunezi de fund.

$sed „s/test/alt test/” fișierul meu
Ce este în fișier și ce va fi eliminat după procesarea sed.


Fișierul de ieșire și rezultatele prelucrării dvs

Comanda de înlocuire procesează în mod normal un fișier care constă din mai multe rânduri, dar înlocuiește prima intrare a fragmentului selectat cu text în fiecare rând. Pentru a înlocui toate intrările în șablon, trebuie să schimbați semnul corespunzător.

Schema de înregistrare a comenzii de înlocuire sub ora steagurilor victorioase arată astfel:

S/model/înlocuire/steaguri
Această comandă poate fi modificată în mai multe moduri.

  • La transferul numărului, se asigură numărul de serie al intrării șablonului în rând, iar intrarea în sine este înlocuită.
  • Semnul g indică cei care trebuie să proceseze toate intrările din șablon care sunt pe rând.
  • Semnul p indică cele care trebuie plasate în locul rândului de ieșire.
  • Fișierul formular w specifică comenzile care trebuie să scrie rezultatele procesării într-un fișier text.
Să aruncăm o privire la prima versiune a comenzii de înlocuire, din pozițiile desemnate ale intrării de înlocuire a fragmentului căutat:

$ sed "s/test/un alt test/2" fișierul meu

Faceți clic pe comanda de înlocuire din poziția desemnată a fragmentului de înlocuire

Aici ni s-a spus, ca ensign, să înlocuim numărul 2. Acest lucru a dus la faptul că acesta a fost înlocuit cu o altă intrare în model în rândul de piele. Acum încercăm codul de înlocuire global - g:

$ sed "s/test/alt test/g" fișierul meu
După cum se poate vedea din rezultate, această comandă a înlocuit toate intrările în șablon cu text.


Înlocuire globală

Comanda de înlocuire p vă permite să afișați rânduri în care se găsesc erori, caz în care tasta -n, introdusă sub comanda sed, suprimă originea inițială:

$ sed -n "s/test/alt test/p" fișierul meu
Ca urmare, atunci când rulați sed cu această configurație, pe ecran sunt afișate mai multe rânduri (în exemplul nostru - un rând), pentru care sarcini se găsește un fragment de text.


Vikoristannya ensign comanda înlocui p

Acest lucru se face rapid de ensign w, care vă permite să salvați rezultatele procesării textului într-un fișier:

$ sed "s/test/alt test/w output" fișierul meu


Salvarea rezultatelor procesării textului într-un fișier

Este bine de observat că de îndată ce comenzile sunt date, acestea sunt scoase la STDOUT și un fișier este scris pe propriul rând, al cărui nume este specificat după w.

Simboluri-divizoare

Stabiliți că trebuie să înlocuiți /bin/bash cu /bin/csh în fișierul /etc/passwd. Zavdannya nu este la fel de pliabil:

$ sed "s/\/bin\/bash/\/bin\/csh/" /etc/passwd
Totuși, totul nu arată bine. Întregul punct din dreapta este că, așa cum sunt folosite barele oblice drepte în rolul de a separa simbolurile, aceleași simboluri din rândurile sed trebuie să fie eliminate. Ca urmare, lizibilitatea comenzii are de suferit.

Din fericire, sed ne permite să personalizăm caracterele de separare pentru a fi utilizate în comanda înlocuire. Primul caracter care apare după s este important:

$ sed "s!/bin/bash!/bin/csh!" /etc/passwd
În acest caz, ca separator de semne victorioase, rezultatul este că codul este mai ușor de citit și arată mult mai bine decât înainte.

Selectați fragmente de text pentru editare

Dosi a apelat sed pentru a procesa tot fluxul de date trimis editorului. În astfel de cazuri, pentru ajutor suplimentar, este necesar să extrageți orice parte a textului - orice rând specific sau grup de rânduri. Pentru a ajunge la un astfel de punct, puteți lua rapid două abordări:
  • Setați schimbul la numerele rândurilor care se formează.
  • Specificați filtrul care se potrivește cu rândurile pe care trebuie să le procesați.
Să aruncăm o privire la prima abordare. Există două opțiuni posibile aici. Primul, privit mai jos, transmite numărul unui rând care trebuie procesat:

$sed „2s/test/alt test/” fișierul meu


Lucrarea este mai mică de un rând, numărul de sarcini sub ora apelului sed

O altă opțiune este intervalul de rânduri:

$ sed "2.3s/test/alt test/" fişierul meu


Procesarea unui interval de rânduri

În plus, puteți utiliza comanda înlocuire, astfel încât fișierul să fie adăugat începând de la orice rând până la sfârșit:

$ sed "2,$s/test/alt test/" fişierul meu


Procesarea fișierului începând de la alt rând până la sfârșit

Pentru a utiliza comanda suplimentară pentru a înlocui numai rândurile care se potrivesc cu filtrul specificat, trebuie să apelați comanda astfel:

$ sed "/likegeeks/s/bash/csh/" /etc/passwd
Prin analogie cu cele care au fost analizate mai sus, șablonul este trecut înaintea numelor comenzii s.


Procesarea rândurilor care reprezintă filtrul

Aici ne-am uitat la un filtru foarte simplu. Pentru a descoperi pe deplin potențialul acestei abordări, puteți accelera practica regulată. Vom vorbi despre ele într-unul dintre materialele viitoare din această serie.

Vedere a rândurilor

Utilitarul sed nu este potrivit doar pentru înlocuirea unei secvențe de caractere din rânduri cu alta. Cu acest ajutor, puteți șterge și rânduri dintr-un flux de text folosind comanda vikorist d.

Wiki de comandă arată astfel:

$sed „3d” fișierul meu
Dorim ca al treilea rând să fie vizibil în text. Vă rugăm să acordați atenție celor care nu vorbesc despre dosar. Fișierul nu va mai fi permanent, iar fișierul șters nu va mai fi transferat în noul fișier, care va fi creat de sed.


Vedere a celui de-al treilea rând

Dacă nu specificați numărul rândului care este afișat înainte de a apela comanda d, toate rândurile din flux vor fi vizibile.

Axa este cum să setați comanda d la intervalul de rânduri:

$sed „2,3d” fișierul meu


Gamă de rânduri disponibilă

Și axa este cum să ștergeți rândurile începând de la cel dat - și până la sfârșitul fișierului:

$sed „3,$d” fișierul meu


Vizualizați rândurile până la sfârșitul fișierului

Rândurile pot fi șterse în spatele șablonului:

$ sed "/test/d" fișierul meu


Vedere a rândurilor din spatele șablonului

Când faceți clic pe d, puteți specifica o pereche de șabloane - rândurile în care se încadrează șablonul și rândurile care se află între ele vor fi vizibile:

$ sed "/secunda/,/al patrulea/d" fișierul meu


Vizualizați o serie de rânduri folosind șabloane suplimentare

Inserarea textului în flux

Folosind sed, puteți insera date într-un flux de text folosind comenzile i și a:
  • Comanda i adaugă un rând nou înaintea celui dat.
  • Comanda a adaugă un nou rând după cel dat.
Să aruncăm o privire la capătul comenzii Vikoristan i:

$ echo „Un alt test” | sed "i\Primul test"


Echipa i

Acum să ne uităm la comanda a:

$ echo „Un alt test” | sed "a\Primul test"


Comanda a

Aparent, aceste comenzi adaugă text înainte sau după date în flux. De ce trebuie să adăugați un rând aici în mijloc?

Aici ne va ajuta să includem numărul rândului de suport în curent sau șablon. Vă rugăm să rețineți că adresarea rândurilor ca interval nu va funcționa aici. Folosind comanda i, specificând numărul rândului, trebuie să inserați un nou rând înaintea acestuia:

$ sed "2i\Aceasta este linia inserată." Dosarul meu


Comanda i de la numărul atribuit rândului de referință

Zrobimo aceleași echipe a:

$ sed "2a\Aceasta este linia atașată." Dosarul meu


Comanda a din numărul atribuit rândului de referință

Creșteți respectul față de diferența în munca echipelor i și a. Primul inserează un rând nou înaintea celui alocat, iar celălalt după acesta.

Înlocuirea rândurilor

Comanda c vă permite să schimbați un întreg rând de text în fluxul de date. Când faceți clic, trebuie să specificați numărul rândului, în loc de care fluxul trebuie să adauge date noi:

$ sed "3c\Aceasta este o linie modificată." Dosarul meu


Înlocuirea unui rând în ansamblu

De îndată ce se face clic pe comandă, un șablon care arată ca textul original sau expresia regulată va fi înlocuit cu toate rândurile similare șablonului:

$ sed "/Acesta este/c Această linie de text schimbată." Dosarul meu


Înlocuirea rândurilor în spatele unui șablon

Înlocuirea caracterelor

Comanda y operează pe următoarele caractere, înlocuindu-le în mod constant înainte de a trece datele la comandă:

$sed „y/123/567/” fișierul meu


Înlocuirea caracterelor

Când utilizați această comandă, este necesar să vă asigurați că este lipită de întregul flux de text și nu este posibil să o includeți cu introduceri specifice de caractere.

Afișarea numerelor de rând

Când apelați sed folosind comanda =, utilitarul afișează numerele de rând ale fluxului de date:

$sed "=" fișierul meu


Afișarea numerelor de rând

Editorul exact al numerelor de rând din fața locului.

Dacă treceți acest model de comandă și utilizați tasta sed -n, vor fi afișate numerele de rând corespunzătoare modelului:

$ sed -n "/test/=" fișierul meu


Afișarea numerelor de rând care corespund modelului

Citiți datele pentru a le insera în fișier

Mai presus de toate, ne-am uitat la metoda de inserare a datelor din flux, indicându-le pe cele care trebuie inserate, chiar sub ora apelului sed. Cum poți salva rapid datele ca fișier? Care este scopul comenzii r, care vă permite să introduceți date în flux? fișierul specificat. De îndată ce faceți clic, puteți introduce numărul rândului dacă trebuie să îl introduceți în fișier sau șablon.

Să aruncăm o privire la fund:

$sed „3r newfile” fișierul meu


Inserat într-un flux în loc de fișier

Aici, în loc de fișierul newfile, fișierul myfile a fost inserat după al treilea rând.

Axa ce se va întâmpla dacă stați nemișcat timp de o oră și apelați șablonul de comandă r:

$ sed "/test/r fişier nou" fişierul meu


Șablon Vikoristanya sub ora comenzii r

În schimb, fișierul va fi inserat după rândul skin care corespunde șablonului.

fundul

Suntem conștienți de o astfel de preocupare. Un fișier care are o secvență unică de caractere, cum ar fi nevoia de a-l înlocui cu date preluate dintr-un alt fișier. Și să recunoaștem, va exista un fișier nou fișier, în care secvența simbolurilor DATE joacă rolul unui indicator de înlocuire. Datele care trebuie înlocuite cu DATE sunt salvate în fișierul de date.

Puteți obține rapid aceste informații folosind comenzile r și d ale editorului de flux sed:

$ Sed "/DATA>/ (r newfile d)" fișierul meu


Înlocuirea registrului cu locul de completare cu date reale

După cum puteți vedea, înlocuiți DATA sed adăugând două rânduri la fișierul de date în fluxul de ieșire.

Pungi

Astăzi ne-am uitat la elementele de bază ale lucrului cu editorul de flux sed. Naspravdi sed - acesta este un subiect grozav. Acest antrenament poate fi complet combinat cu antrenamentul de programare în limbaje noi, dar odată ce înțelegi elementele de bază, poți stăpâni sedul în orice moment. Ca urmare, capacitatea dumneavoastră de a procesa aceste texte suplimentare va fi mai puțin limitată.

Asta e tot pentru azi. Data viitoare să vorbim despre limbajul tributelor awk.

Cititorii Shanovny! Folosești sed în munca de zi cu zi? Dacă este așa, vă rugăm să împărtășiți plăcerea.

 

 

Tse tsikavo: