Sziasztok!
Ez lenne a parancs. grep -A1 "valami"
Ha valaki használta már így a grepet, meg tudná mondani, hogy miért van az hogy helyenként beszúr egy-egy sort? Amiben láthatóan csak két jel van: --
Megcsinálja rendesen a szűrést, és hozzáadja ugye az -A1-nek megfelelő +1 sort, meg plusz még néha néhányat. grep "valami"
még teljesen jó eredményt ad. Próbáltam Debianon és Ubuntun is ugyan ez az eredmény. Egy Java Scriptes .html oldallal lenne a gond, amit lynx
-el töltök le. Addig rendben is van a dolog, még simán a grep is jó -A1 nélkül.
Hozzászólások
A -A1 azt jelenti, hogy a talalati sor utan meg 1 sort kiir.
Tehat egy talalathoz 2 sor tartozik: a talalati sor, es az utanajovo.
Ha az inputban tobb talalat is van, akkor ez tobbszor ismetlodik meg.
A "^--$" pedig elvalasztja ezeket a talalati csoportokoat.
Ahogy azt a grep manualja irja:
-A NUM, --after-context=NUM- Print NUM lines of trailing context after matching lines.
Places a line containing a group separator (--) between
contiguous groups of matches.
Elso otlet lenne utanabiggyeszteni egy grep -v "^--$" parancsot, de lehetseges, hogy az inputban is van ilyen, es az kell.
az alabbi parancs majdnem ezt csinalja:
awk '/valami/{print; getline print}'
az vele a baj, hogyha a kovetkezo sorban is van talalat, akkor nem irja ki a rakovetkezo sort.
Az alabbi megoldas teljesen jo, azonban tul bonyi ;)
awk '/valami/{print; do{if(0 >= getline)exit; print; }while( $0 ~ /valami/) }'
Kösz. :)
Megy. De tényleg bonyi egy picit...
Nekem ez áttekinthetőbbnek tűnik, és még karakterre sem hosszabb, sőt:
awk '/valami/ { print ; Found=1 ; next ; } Found == 1 { print ; Found = 0 }'
Legalábbis pár triviális tesztben azt adja, mint a grep -A1
ügyes!
Na ja :-)
Lényegében az én megoldásom is ezt csinálja csak kevesebb karakterrel :)
Sajnos a tied rosszul működk abban az esetben, ha pl. két egymást követő sorban találat van, és utána van más - nem találat sor is (ezt a harmadik sort nem írod ki, mert hiányzik az "én" awk-omnak a második feltétele) a sedes játékból. Amúgy igen, néztem, de csak rápillantottam és csak most veséztem ki. :-) Arról már nem is beszélve :-), hogy kell egy pontosvessző pluszban a záró print után is, ha egy sorba akarjuk írni a záró kacsacsőrrel. A GNU sed elfogadja így is, ellenben a szintaxis szerint kellene (FreeBSD sed nem eszi meg, GNU sed megeszi).
Szerk: szerintem sed-del is megoldható jól (ezzel az algoritmussal), ott is van elágaztató művelet, de ahhoz most nem érzem magam kellően perverznek.
Szerk2: most veszem észre, hogy ezt a speciális esetet (találat; találat; nem-találat) Egerész első hozzászólásában külön kiemelte.
Valóban. Na, akkor a sed-be még egy kicsit jobban beleásom magam...
Amikor CSA tartotta (elte) a unix bevezetőt, akkor brahiztunk néha, hogy egy beadandó feladat (általános kezdő shellscript):
megoldható-e csak sed -del.
megoldható-e csak egyetlen pipeline -nal
megoldható-e csak egyetlen pipeline-nal, és benne csak sed-del
megoldható-e csak egyetlen sed -del.
Ha szövegfeldolgozás volt, akkor általában igen, jó kis write-only sed programocskák születettek ;)
Igen, én is egyre inkább tapasztalom, hogy jó anyag ez a sed, csak sosincs időm eleget foglalkozni vele...
Egy nagyon egyszerű megoldás: