Si të fshini linja specifike nga një skedar duke përdorur sed

Ndonjëherë na duhet të heqim një rresht specifik nga një ose më shumë skedarë. Për shembull, kam pasur një listë të tërë skedarësh dhe më duhet të heq rreshtin #27 nga të gjithë ata (rreshti #27 është një ACL, rregull, konfigurim). Mund të modifikoj skedar pas skedari ose thjesht mund të arrij atë që më duhet duke përdorur komandën sed dhe një skript bash (opsional).

Por, le të provojmë një skedar të vetëm disi të thjeshtë.

Ne kemi skedarin distros-deb.txt i cili përmban këtë:

Debian

Kubuntu

archlinux

solucione

nenexhik

Me fjalë të tjera, skedari distros-deb.txt është vendi ku do të rendisim shpërndarjet e bazuara në Debian, por shohim që rreshti #3 përmban "archlinux", një shpërndarje që qartësisht nuk ka të bëjë fare me Debian, kështu që duhet ta heqim atë rresht. Për të hequr rreshtin #3 nga ai skedar, do të shtojmë sa vijon:

sed "3d" distros-deb.txt > distros-deb-ok.txt

Shpjegimi i këtij rreshti është i lehtë: me `sed "3d"` tregojmë se do të fshijmë rreshtin #3, me `distros-deb.txt` i tregojmë se në cilin skedar duhet të punojë, domethënë, të fshijë rreshtin #3 nga ky skedar. Deri në këtë pikë, nëse shtypim `<kbd>Enter</kbd>`, do të na tregojë atë që duam, por në terminal, kështu që me `> distros-deb-ok.txt` tregojmë se në vend që të tregojë rezultatin në terminal, duhet ta vendosë atë në një skedar me këtë emër.

Çfarë është e thjeshtë?

Gjithashtu mund të shmangim përdorimin e > distros-deb-ok.txt duke përdorur një parametër sed , parametrin -i

Me fjalë të tjera, nëse duam ta heqim rreshtin nga skedari dhe ta ruajmë atë me të njëjtin emër (dhe jo në një skedar tjetër), thjesht duhet të shtojmë parametrin -i :

sed -i "3d" distros-deb.txt

Kjo do të heqë rreshtin # 3 nga distros-deb.txt dhe do ta ruajë atë.

Po sikur të dua një sërë vijash, që do të thotë të heq rreshtin # 3, por edhe # 4 dhe # 5? Për të arritur këtë ne vendosim diapazonin nga 3 në 5, domethënë:

sed -i "3,5d" distros-deb.txt

Dhe do të më tregojë vetëm debian dhe kubuntu 

Pra, çfarë nëse unë dua të fshij nga rreshti 2 në atë të fundit, kur nuk i di linjat totale?

Thjesht përdorni simbolin e dollarit - »$

sed -i "2,$d" distros-deb.txt

Në rast se doni të eleminoni nga rreshti i parë në # 4, atëherë ne thjesht vendosim vlerën 1 në fillim:

sed -i "1,4d" distros-deb.txt

Kaq është pak a shumë, një këshillë mjaft e dobishme kur doni të shkruani skripte bash për të automatizuar detyrat dhe duhet të modifikoni dhe fshini rreshta në skedarët e konfigurimit. Për të modifikuar, mund të përdorim sed ose perl , dhe për të fshirë, ne tashmë e dimë se si ta bëjmë me sed.

të fala


Shto si burim të preferuar në Google