Megjegyzések
Válasz
grep
nyert ” Nem segít itt. Ez egy olyan feladat, amelyet jobban el lehet érni a sed
használatával a tartomány kifejezések használatával:
$ sed -n "/aaa/,/cdn/p" file aaa b12 cdn $ sed -n "/zdk/,/dke/p" file zdk aaa b12 cdn dke
sed -n
elnyomja az automatikus nyomtatást, így a sorok kinyomtatásra kerülnek, ha kifejezetten erre kérik. És ez akkor történik, amikor a /aaa/,/cdn/
tartomány megtörténik.
Ezek a tartománykifejezések a awk
könyvtárban is elérhetők, ahol a következőket mondhatja:
awk "/zdk/,/dke/" file
Természetesen minden ezek a feltételek kibővíthetők egy szigorúbb regexre, például sed -n "/^aaa$/,/^cdn$/p" file
annak ellenőrzésére, hogy a vonalak pontosan aaa
és cdn
, semmi más.
Megjegyzések
- Hú, ugyanaz a problémám volt, és nem kérdeztem ' t. A
grep -n
két példányát használtam, és összehasonlítottam a megoldás számát. - A @KipK tartománykifejezések olyan hasznos eszközek az ilyen típusú problémákhoz:) használjon
awk
-t és néhány zászlót is, de ezzel az alapeset meglehetősen egyszerű. - @Fedorqui, problémát kapok, ha a keresési minta xml-eket tartalmaz. hasonlóan, a következővel kell kezdeni: < ns0: abcd xmlns = " " >, megkapja az újraértékelést. De ez mutatja: < abcd xmlns = " " > is. Kipróbáltam a sed -n ' / \ < ns0 \: abcd xmlns \ = \ " \ " \ > /, / \ < ns0 \: abcd \ > / p fájl
- @MukulAnand adjon meg egy példát, hogy ellenőrizhessük az ellenőrzést
- Bármilyen módon nem maguk nyomtassák ki a kezdő és a végmintát (kivéve a fej és a farok használatát)?
Válasz
sed
sed -n " /^aaa$/,/^cdn$/w output1 /^zdk$/,/^dke$/w output2 " file
Válasz
Itt van a grep
parancs:
grep -o "aaa.*cdn" <(paste -sd_ file) | tr "_" "\n"
Többsoros egyezést érhet el a , de a grep
(-P
– perl-regexp szót kell használnia – amelyet nem minden platform támogat , mint az OS X), így megoldásként új sorokat cserélünk _
karakterre és grep
után visszaváltjuk őket.
Alternatív megoldásként használhatja a pcregrep
, amely támogatja a többsoros mintákat (-M
).
Vagy használja a ex
:
ex +"/aaa/,/cdn/p" -scq! file
/foo/,/bar/
funkcióval meg tudja határozni a mintákat. A minta sajátosságai (például a végén találhatók) másodlagosak.