Sorok összefűzése sortörés törléssel, “sed”-del

Ezt elég sokáig keresgéltem a neten, mire megtaláltam, és sajnos a magyarázat nem is volt mellette, úgyhogy érteni azóta sem értem, csak használom :)

Egy logot dolgoztam fel, ami nagyon idiótán tördelte a bejegyzéseket fix maximális szélességű sorokra, függetlenül attól, hogy az az adott terminál ablakban kifért volna-e rendesen is, vagy sem. Gondoltam, kitörlöm a sorok végén az “új sor” karaktert, majd újratördelem rendesen, a bejegyzések eleje úgyis mindig dátum, arra könnyű mintát illeszteni, hogy előtte mindig nyisson új sort. Nagy naívan azt gondoltam, hogy sed-del majd a “\n” karaktereket jól behelyettesítem semmire, és kész is. Persze ez így marhára nem csinálja azt, amit kéne, mivel a “n”-t a sor végén nem veszi figyelembe a sed:

[root@gepem ~]# cat bena.log | sed 's/\n//g'

Egy darabig elbabráltam vele, de végül maradt a Google, és nagy nehezen megtaláltam ami nekem kell:

[root@gepem ~]# cat bena.log | sed ':a;N;$!ba;s/\n//g'

Na, végülis az alap elgondolás jó volt ugye (sed ‘s/\n//g’), de hogy az elejére a sed paramétereknek mit raktak a jómunkásemberek, na arról lövésem sem volt, de műxik. (Ha valaki fel tud világosítani a pontos működéséről, ne tartsa magában! :) Azért mivel szeretem tudni, hogy hogyan működnek, amiket használok, valamennyire kimazsoláztam a man-ból, hogy ki, mit csinál. Amire eddig eljutottam az ez:

‘N’ -Az aktuális sort a következővel összefűzve vizsgálja. Tehát a “\n”-t, amit egyébként ugye sorvégen nem vesz figyelembe találatként, így már meg fogja találni, mert a sor közepére kerül

‘:a’ -Ez csak egy címke (label), ide vissza fogunk térni.

‘ba’ -A b után lévő (a) címkére ugrik.

‘$!’ – A “$” jelzi, ha elértük az utolsó sort. A “!” pedig negál.

‘s/\n//g’ – Ez pedig ugye egy sima csere: “\n”-t semmire az összes találatra.

Tehát minden egyes sort összefűzűnk a következővel, egészen addig, míg az utolsó sort el nem érjük, majd ebben az egy sorban kicseréljük az összes “n” karaktert “üres sztringre”.

Azt hiszem nagyjából értem. De hogy magamtól ezt sosem találtam volna ki, az is biztos… 😀 Azért a sed-et (is) nagyon szeretjük! <3

If you enjoyed this post, please consider leaving a comment or subscribing to the RSS feed to have future articles delivered to your feed reader.
This entry was posted in Uncategorized and tagged , . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>