Siis kaksi peräkkäistä whitespaceja sisältävää riviä pitäisi jättää kodskemattoamaksi mutta vain yksittäiset 'tyhjät' poidstettava.
Tuo on aika klassinen "hankala" tehtävä "sed": lle. Annan vinkin mutta jätän onnistumisen riemun sinulle. Tuohon on pari eri tapaa mutta helppo tapa on kiertää ongelma, korvataan "LF" jollain helpommalla merkillä (sed: in kannalta), se etsintäsääntö sitten on: Etsi kaksi "LF" merkkiä jonka edessä tai perässä ei ole "LF". Tuossa siis se "LF" on nyt jokin helpompi merkki. Palautetaan "LF" alkuperäiseksi. "tr" vaihtaa kätevästi merkin toiseksi.
Edit: Mielessäni heräsi vielä kysymys onko kyseessä tilanne kaksi peräkkäistä
<LF> <LF> kuten oletin vai
<LF> <"jotain_muuta_valkoista"><LF> ?
Vai tarkoititko jotain aivan muuta ? "Tyhjä rivi" voi tarkoittaa hyvin monta eri asiaa/kombinaatiota.
Aito mallidatan pätkä auttaisi näkemään mitä se tarkasti ottaen on. Voisitko laittaa pätkän dataa privana tulemaan ellet halua esille, kirjoittelen sille säännön.
Edit_2:
Annan esimerkin tapauksessa että tuo yksi tyhjä rivi on rakenteeltaan yksinkertaisesti
<LF><LF>
Oletetaan että meillä on koetiedosto "koe.txt" jolla testataan toimintaa. Tässä on lause joka tiputtaa vain yksinäisen tyhjän rivin tuosta tiedostosta:
cat koe.txt | tr '\n' '|' | sed 's/\([^|]\)\(||\)\([^|]\)/\1|\3/g' | tr '|' '\n' >koe2.txtmutta jättää useamman tyhjän rivin koskemattomaksi ja kirjoittaa tuloksen koe2.txt tiedostoon.
Jos tuo yksinkertainen versio ei tee mitä haluat niin siihen pystyy täydentämään puutteet säännössä. Sääntö käyttää tilapäisenä merkkinä palkkia "|" eli putkimerkkiä. Tuo ei saa esiintyä varsinaisessa tekstissä.
Selitys:
Jokainen <LF> merkki korvataan ensin palkilla "|". Sääntö on jaettu kolmeen osaan suluilla ()()() mutta nuo pitää sed: in tapauksessa "eskeipata" eli laittaa kenoviiva kunkin sulkumerkin eteen. Näihin suluilla merkittyihin alueisiin voidaan viitata merkinnöillä "\1 \2 \3". Merkintä "\1" siis palauttaa osuma-alueen 1, "\2" osuma-alueen 2, jne. Etsimme nyt osumaa tilanteessa missä on kaksi ja vain kaksi palkkia peräkkäin. Sääntönä tuon joutuu muotoilemaan:
<ei_palkki> <||> <ei_palkki>
mikä vastaa sitä yhtä tyhjää riviä eli alkuaan <LF><LF>.
Säännössä tarvitaan nuo "esteet" että vältetään osuma kun palkkeja on enemmän kuin kaksi peräkkäin.