15 Mapuslanon nga sed Command Tips ug Tricks alang sa Adlaw-adlaw nga Linux System Administration Tasks


Ang matag tagdumala sa sistema kinahanglan nga mag-atubang sa yano nga mga file sa teksto matag adlaw. Ang pagkahibalo kon unsaon pagtan-aw sa pipila ka mga seksyon, unsaon pag-ilis sa mga pulong, ug kung unsaon pagsala sa sulod gikan sa mga file mao ang mga kahanas nga kinahanglan nimo nga magamit nga dili kinahanglan nga mag-search sa Google.

Niini nga artikulo atong ribyuhon si sed, ang iladong stream editor, ug ipaambit ang 15 ka mga tip sa paggamit niini aron matuman ang mga tumong nga gihisgotan sa sayo pa, ug daghan pa.

1. Pagtan-aw sa lain-laing mga linya sa usa ka dokumento

Ang mga himan sama sa ulo ug ikog nagtugot kanato sa pagtan-aw sa ubos o ibabaw sa usa ka file. Unsa kaha kung kinahanglan naton tan-awon ang usa ka seksyon sa tunga? Ang mosunod nga sed one-liner mobalik sa mga linya 5 hangtod 10 gikan sa myfile.txt:

# sed -n '5,10p' myfile.txt

2. Pagtan-aw sa tibuok file gawas sa gihatag nga range

Sa laing bahin, posible nga gusto nimong i-print ang tibuuk nga file gawas sa usa ka piho nga range. Aron dili iapil ang mga linya 20 hangtod 35 gikan sa myfile.txt, buhata:

# sed '20,35d' myfile.txt

3. Pagtan-aw sa dili sunod-sunod nga mga linya ug mga han-ay

Posible nga interesado ka sa set sa dili sunod-sunod nga linya, o sa labaw sa usa ka range. Atong ipakita ang mga linya 5-7 ug 10-13 gikan sa myfile.txt:

# sed -n -e '5,7p' -e '10,13p' myfile.txt

Sama sa imong makita, ang -e nga kapilian nagtugot kanamo sa pag-execute sa usa ka gihatag nga aksyon (sa kini nga kaso, mga linya sa pag-print) alang sa matag range.

4. Pag-ilis sa mga pulong o karakter (basic substitution)

Aron ilisan ang matag pananglitan sa pulong bersyon sa story sa myfile.txt, buhata:

# sed 's/version/story/g' myfile.txt

Dugang pa, mahimo nimong hunahunaon ang paggamit sa gi imbes nga g aron mabalewala ang karakter nga kaso:

# sed 's/version/story/gi' myfile.txt

Aron mapulihan ang daghang blangko nga mga wanang sa usa ka wanang, among gamiton ang output sa ip route show ug usa ka pipeline:

# ip route show | sed 's/  */ /g'

Itandi ang output sa ip route show nga adunay ug wala ang pipeline:

5. Pag-ilis sa mga pulong o karakter sa sulod sa usa ka range

Kung interesado ka sa pag-ilis sa mga pulong sulod lang sa linya sa linya (pananglitan, 30 hangtod 40), mahimo nimo:

# sed '30,40 s/version/story/g' myfile.txt

Siyempre, mahimo nimong ipaila ang usa ka linya pinaagi sa katumbas nga numero niini imbes sa usa ka range.

6. Paggamit sa regular nga mga ekspresyon (advanced substitution) - I

Usahay ang mga file sa pag-configure puno sa mga komento. Bisan kung kini sigurado nga mapuslanon, mahimo’g makatabang nga ipakita lamang ang mga direktiba sa pagsumpo usahay kung gusto nimo tan-awon silang tanan sa usa ka pagtan-aw.

Aron makuha ang walay sulod nga mga linya o kadtong nagsugod sa # gikan sa Apache configuration file, buhata:

# sed '/^#\|^$\| *#/d' httpd.conf

Ang caret sign nga gisundan sa number sign (^#) nagpaila sa sinugdanan sa usa ka linya, samtang ang ^$ nagrepresentar sa mga blangko nga linya. Ang mga bertikal nga bar nagpaila sa boolean nga mga operasyon, samtang ang paatras nga slash gigamit aron makalingkawas sa mga bertikal nga bar.

Niini nga partikular nga kaso, ang Apache configuration file adunay mga linya nga adunay #'s dili sa sinugdanan sa pipila ka linya, busa *# gigamit sa pagtangtang usab niadto.

7. Paggamit sa regular nga mga ekspresyon (advanced substitution) - II

Sa pag-ilis sa usa ka pulong nga nagsugod sa uppercase o lowercase sa laing pulong, mahimo usab natong gamiton ang sed. Sa pag-ilustrar, atong ilisan ang pulong zip o Zip og rar sa myfile.txt:

# sed 's/[Zz]ip/rar/g' myfile.txt

8. Pagtan-aw sa mga linya nga adunay gihatag nga sumbanan

Ang laing paggamit sa sed naglangkob sa pag-imprenta sa mga linya gikan sa usa ka file nga mohaum sa gihatag nga regular nga ekspresyon. Pananglitan, mahimo kaming interesado sa pagtan-aw sa mga kalihokan sa pagtugot ug pag-authenticate nga nahitabo kaniadtong Hulyo 2, sumala sa /var/log/secure log sa usa ka CentOS 7 server.

Niini nga kaso, ang sumbanan nga pangitaon mao ang Hulyo 2 sa sinugdanan sa matag linya:

# sed -n '/^Jul  1/ p' /var/log/secure

9. Pagsal-ot sa mga luna sa mga file

Uban sa sed, mahimo usab namon nga i-insert ang mga espasyo (blangko nga linya) para sa matag linya nga wala’y sulod sa usa ka file. Aron isulod ang usa ka blangko nga linya sa matag laing linya sa LICENSE, usa ka plain text file, buhata:

# sed G myfile.txt

Aron masulod ang duha ka blangko nga linya, buhata:

# sed 'G;G' myfile.txt

Pagdugang ug dakong letra nga G nga gibulag sa usa ka tuldok-kuwit kon gusto nimong idugang ang mga blangko nga linya. Ang mosunod nga hulagway naghulagway sa panig-ingnan nga gilatid niini nga tip:

Kini nga tip mahimong magamit kung gusto nimo nga susihon ang usa ka dako nga file sa pag-configure. Ang pagsal-ot og blangko nga wanang sa matag linya ug pag-pipe sa output ngadto sa mas ubos moresulta sa mas mahigalaon nga kasinatian sa pagbasa.

10. Pagsundog sa dos2unix nga adunay inline nga pag-edit

Ang dos2unix nga programa nag-convert sa mga plain text files gikan sa Windows/Mac formatting ngadto sa Unix/Linux, nga nagtangtang sa mga tinago nga newline nga mga karakter nga gisal-ot sa pipila ka text editor nga gigamit sa maong mga plataporma. Kung wala kini ma-install sa imong Linux system, mahimo nimong sundogon ang pagpaandar niini gamit ang sed imbis nga i-install kini.

Sa hulagway sa wala makita nato ang daghang mga karakter sa DOS nga bag-ong linya (^M), nga sa ulahi gitangtang gamit ang:

# sed -i 's/\r//' myfile.txt

Palihug timan-i nga ang -i nga opsyon nagpaila sa in-place nga pag-edit. Unya ang mga pagbag-o dili ibalik sa screen, apan i-save sa file.

Pahinumdom: Mahimo nimong isulod ang mga karakter sa DOS nga bag-ong linya samtang nag-edit sa usa ka file sa vim editor gamit ang Ctrl+V ug Ctrl+M.

11. In-place nga pag-edit ug pag-backup sa orihinal nga file

Sa miaging tip gigamit namon ang sed aron usbon ang usa ka file apan wala i-save ang orihinal nga file. Usahay usa ka maayong ideya nga magtipig og backup nga kopya sa orihinal nga file kung ugaling.

Aron mahimo kana, ipakita ang usa ka suffix nga nagsunod sa opsyon nga -i (sa sulod sa usa ka kinutlo) nga gamiton aron mabag-o ang ngalan sa orihinal nga file.

Sa mosunod nga panig-ingnan atong pulihan ang tanan nga mga higayon niini o Kini (wala magtagad sa kaso) uban niana sa myfile.txt, ug atong i-save ang orihinal nga file isip myfile.txt.orig.

Sa katapusan, gamiton namon ang diff utility aron mahibal-an ang mga kalainan tali sa duha nga mga file:

# sed -i'.orig' 's/this/that/gi' myfile.txt

12. Pagbalhin sa mga parisan sa mga pulong

Ibutang ta nga ikaw adunay usa ka file nga adunay kompleto nga mga ngalan sa pormat Una nga ngalan, Apelyido. Aron maproseso ang file, mahimo nimong ilisan ang Apelyido ug Pangalan.

Mahimo naton kana sa sed nga dali ra:

# sed 's/^\(.*\),\(.*\)$/\, /g' names.txt

Sa hulagway sa ibabaw atong makita nga ang mga parentesis, kay espesyal nga mga karakter, kinahanglang i-eskapo, sama sa mga numero 1 ug 2.

Kini nga mga numero nagrepresentar sa gipasiugda nga regular nga mga ekspresyon (nga kinahanglan nga makita sa sulod sa parentesis):

    Ang
  1. 1 nagrepresentar sa sinugdanan sa matag linya hangtod sa comma.
  2. Ang
  3. 2 maoy placeholder sa tanang butang nga husto sa koma hangtod sa kataposan sa linya.

Ang gusto nga output gipakita sa format nga SecondColumn (Apelyido) + comma + space + FirstColumn (First name). Mobati nga gawasnon nga usbon kini sa bisan unsang gusto nimo.

13. Pag-ilis sa mga pulong lamang kung adunay makit-an nga lahi nga tugma

Usahay ang pag-ilis sa tanan nga mga higayon sa usa ka gihatag nga pulong, o usa ka random nga pipila, dili eksakto kung unsa ang kinahanglan naton. Tingali kinahanglan naton nga himuon ang pagpuli kung adunay makit-an nga lahi nga panagsama.

Pananglitan, mahimo natong ilisan ang pagsugod sa paghunong kung ang pulong nga serbisyo makita sa parehas nga linya. Sa kana nga senaryo, ania ang mahitabo:

We need to start partying at work,
but let’s remember to start all services first.

Sa una nga linya, ang pagsugod dili pulihan sa paghunong tungod kay ang pulong nga serbisyo wala makita sa kana nga linya, sukwahi sa ikaduha nga linya.

# sed '/services/ s/start/stop/g' msg.txt

14. Pagbuhat sa duha o labaw pa nga mga pagpuli sa usa ka higayon

Mahimo nimong ikombinar ang duha o daghan pa nga mga substitusyon sa usa ka sed command. Atong pulihan ang mga pulong nga ug linya sa myfile.txt sa Kini ug bersikulo, matag usa.

Timan-i kung giunsa kini mahimo pinaagi sa paggamit sa usa ka ordinaryo nga sed substitution command nga gisundan sa usa ka semicolon ug ikaduha nga substitution command:

# sed -i 's/that/this/gi;s/line/verse/gi' myfile.txt

Kini nga tip gihulagway sa mosunod nga hulagway:

15. Paghiusa sa sed ug uban pang mga sugo

Siyempre, ang sed mahimong ikombinar sa ubang mga himan aron makahimo og mas gamhanang mga sugo. Pananglitan, atong gamiton ang pananglitan nga gihatag sa TIP #4 ug kuhaa ang atong IP address gikan sa output sa ip route command.

Magsugod kita pinaagi sa pag-imprinta lamang sa linya diin ang pulong src anaa. Dayon atong i-convert ang daghang mga luna ngadto sa usa. Sa katapusan, among putlon ang ika-9 nga uma (naghunahuna sa usa ka wanang ingon nga field separator), diin ang IP address:

# ip route show | sed -n '/src/p' | sed -e 's/  */ /g' | cut -d' ' -f9

Ang hulagway sa ubos naghulagway sa matag lakang sa sugo sa ibabaw:

Summary

Niini nga giya gipaambit namo ang 15 sed nga mga tip ug mga limbong aron matabangan ka sa imong adlaw-adlaw nga mga buluhaton sa pagdumala sa sistema. Aduna bay laing tip nga imong gigamit sa kanunay ug gusto nimong ipaambit kanamo ug sa uban pang komunidad?

Kung mao, ayaw kabalaka nga ipahibalo kanamo gamit ang porma sa komento sa ubos. Gidawat usab ang mga pangutana ug komento - nagpaabut kami nga makadungog gikan kanimo!