Paano tanggalin ang mga partikular na linya mula sa isang file gamit ang sed

Sa ilang mga okasyon kailangan naming tanggalin ang isang tukoy na linya mula sa isang file o marami, halimbawa, nangyari sa akin na mayroon akong isang buong listahan ng mga file at kailangan kong tanggalin ang linya # 27 sa lahat ng ito (ang linya # 27 ay isang ACL , pamantayan, panuntunan, pagsasaayos), maaaring mag-edit ng file sa pamamagitan ng file o makakamtan ko lang ang kailangan ko gamit ang utos uhaw at isang bash script (opsyonal).

Ngunit, subukan natin ang isang solong file na medyo simple.

Mayroon kaming file distros-deb.txt na naglalaman nito:

Debian

kubuntu

archlinux

mga solus

gawaan ng kuwaltang metal

Sa madaling salita, ang file distros-deb.txt ay kung saan ilalagay natin ang mga distro na nakabatay sa Debian, ngunit doon natin makikita na sa linya # 3 mayroong "archlinux", isang distro na malinaw na walang kinalaman sa Debian, kaya dapat nating alisin ang linyang iyon. Upang maalis ang linya # 3 ng file na iyon ilalagay namin ang sumusunod:

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

Ang pagpapaliwanag ng linyang ito ay medyo madali, kasama nauuhaw na "3d" ipinapahiwatig namin na tatanggalin namin ang linya # 3, kasama ang distros-deb.txt Ipinapahiwatig namin kung anong file ang gagana, iyon ay, tanggalin ang linya # 3 ng file na ito, hanggang dito kung pinindot namin ang Enter ay ipapakita sa amin kung ano ang gusto namin ngunit sa terminal, kaya > distros-deb-ok.txt ipinapahiwatig namin na sa halip na ipakita ang resulta sa terminal, inilagay ito sa isang file na may ganitong pangalan.

Ano ang simple?

Gayundin, maiiwasan natin ang paggamit ng > distros-deb-ok.txt gamit ang tamang parameter ng uhaw, ang parameter -i

Iyon ay, kung nais naming tanggalin ang linya mula sa file at i-save ito sa parehong pangalan (at hindi sa ibang file), idagdag lamang ang parameter -i :

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

Aalisin nito ang linya # 3 mula sa distros-deb.txt at i-save ito.

Paano kung nais ko ang isang saklaw ng mga linya, iyon ay upang alisin ang linya # 3 ngunit pati na rin ang # 4 at # 5? Upang makamit ito inilalagay namin ang saklaw mula 3 hanggang 5, iyon ay:

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

At ito ay magpapakita lamang sa akin ng debian at kubuntu 

Kaya paano kung nais kong tanggalin mula sa linya 2 hanggang sa huling, kapag hindi ko alam ang kabuuang mga linya?

Gumamit lamang ng simbolo ng dolyar - »$

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

Kung sakaling nais mong alisin mula sa unang linya hanggang # 4 pagkatapos ay inilalagay lamang namin ang halagang 1 sa simula:

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

Ito ang naging lahat, isang napaka kapaki-pakinabang na tip kapag nais mong gumawa ng mga script sa bash upang i-automate ang mga gawain at kailangan mong baguhin at alisin ang mga linya ng mga file ng pagsasaayos, upang mabago maaari naming magamit uhaw o perlas, pati na rin sa pagtanggal alam na natin kung paano gawin ito sa sed 

Regards


Idagdag bilang ginustong mapagkukunan sa Google