Programuotojo Remigijaus Jarmalavičiaus tinklaraštis

Informacinės technologijos, programavimo įrankiai, atviro kodo projektai, knygos ir kiti programuotojo straipsniai.

BASH: Tuščių eilučių šalinimas iš failo

Būdų kaip iš failo pašalinti tuščias eilutes yra daug. Tačiau šiandien, pradėdamas naują rubriką šiame tinklaraštyje papasakosiu kaip tą padaryti BASH pagalba. Šis būdas turėtų veikti naudojant ir kitus konsolių apvalkus, tokius kaip zsh. Pastarąjį, beje, pats ir naudoju, būtent dėl to jį ir paminėjau.

Pats negeek'iškiausias sprendimas yra tiesiog panaudoti jau sukurtą internetinį įrankį. Tačiau geek'ams, kurie nori viską padaryti kaip įmanoma sunkiau ir mažiau suprantamai ne IT žmonėms - šis variantas netiks.

Tuščių eilučių šalinimui galime drąsiai panaudoti sed, tr arba grep komandas. Aprašysiu kaip galima padaryti kiekvienu atveju.

Naudojame lengvąjį variantą - GREP komandą

Pašalinti tuščias eilutes galime labai paprastu būdu grep komanda:

grep . failo_vardas

Duomenis be tuščių eilučių galime iškart išsaugoti į kitą failą tiesiog nukreipdami išvestį:

grep . failo_vardas > failo_vardas_be_tuščių_eilučių

Tokį patį rezultatą galime gauti praleidžiant tuščias eilutes su grep komanda ir išvesti tik tas eilutes, kurios neatitinka tuščios eilutės taisyklės:

grep -v '^$' failo_vardas

Parametras -v randa tik tai, kas neatitinka duotosios sąlygos. Šiuo atveju parašyta reguliarioji išraiška ^$ atitinka tuščią eilutę, kadangi simbolis ^ reiškia pradžią, o $ reiškia pabaigą.

 Kartais kopijuojant tekstus gauname tokį variantą

SED - sudėtingiau, bet taip pat įmanoma

Būtent tokį patį rezultatą galime gauti ir su sed komanda:

sed '/^$/d' -i test

Šioje komandoje atliekame tą patį. Tiesa, čia gali gąsdinti d argumentas, kuris tik pašalina rastą išraiškos reikšmę. O komandinės eilutės argumentas -i leidžia nurodyta failą, kuriame iškart bus atliktas šalinimas. Žinoma, pastarojo argumento galime ir nenurodyti.

TR komanda į pagalbą

Ypatingai dažnai praverčia šios komandos paprastumas keičiant tam tikrus simbolius išvestyje. Taigi, galime pakeisti naujos eilutės simbolį į nieką ir gausime norimą rezultatą:

tr -s '\n' < failo_vardas

Failo, su tuščiomis eilutėmis, turinį nukreipėme į tr komandą pasinaudodami BASH išvesties nukreipimo operacija < failo_vardas.