Tähän kysymykseen on jo annettu vastauksia :

Kommentit

  • Toinen kysymys on mielestäni liian tarkka, jotta se olisi kopio tästä. Suurin osa täältä saaduista vastauksista ' ei toimi siellä, koska vaatimukset ovat erilaiset (määrittämällä ylimääräiset uudet rivimerkit).
  • Luulen, että tässä alku ja loppukuviot voivat olla missä tahansa tiedostossa (ei tarvetta tehdä uusille riveille) huolimatta tietystä esimerkistä, toinen pyytää kokonaisia rivejä.
  • @kenorb it ' s on edelleen sama idea. Tärkein temppu on käyttää yhtä työkaluista, jotka voivat tehdä /foo/,/bar/ mallien määrittelemiseen. Kuvion yksityiskohdat (jotka ovat esimerkiksi lopussa) ovat toissijaisia.
  • Tämä vastaus voi myös olla hyödyllinen: stackoverflow.com/a/48022994/ 2026975

vastaus

grep voitti ” Se ei auta sinua täällä. Tämä on työ, joka on paremmin saavutettavissa sed -toiminnolla käyttämällä lausekkeita:

$ sed -n "/aaa/,/cdn/p" file aaa b12 cdn $ sed -n "/zdk/,/dke/p" file zdk aaa b12 cdn dke 

sed -n estää automaattisen tulostuksen, joten rivit tulostetaan vain, jos sitä nimenomaisesti pyydetään. Ja näin tapahtuu, kun alue /aaa/,/cdn/ tapahtuu.

Nämä aluelausekkeet ovat saatavilla myös kohdassa awk, jossa voit sanoa:

awk "/zdk/,/dke/" file 

Tietysti kaikki nämä ehdot voidaan laajentaa tiukempaan regexiin, kuten sed -n "/^aaa$/,/^cdn$/p" file, jotta voidaan tarkistaa, että linjat koostuvat tarkalleen aaa ja cdn, ei muuta.

Kommentit

  • Vau, minulla oli sama ongelma, enkä ' kysynyt. Käytin kahta grep -n -ilmentymää ja verrasin ratkaisuni lukumäärää.
  • @KipK -alueen lausekkeet ovat niin hyödyllinen työkalu tällaisiin ongelmiin:) Voit käytä myös awk -merkkiä ja joitain lippuja, mutta perustapaus on tässä melko suoraviivainen.
  • @Fedorqui, saan ongelman, jos hakukuvio sisältää xml-tiedostoja. kuten minun täytyy hakea alkaen < ns0: abcd xmlns = " " >, saat uudelleenmyynnin. Mutta se näyttää < abcd xmlns = " " > myös. Olen kokeillut sed -n ' / \ < ns0 \: abcd xmlns \ = \ " \ " \ > /, / \ < ns0 \: abcd \ > / p-tiedosto
  • @MukulAnand Anna esimerkki, jotta voimme tarkistaa ruudun
  • Millä tahansa tavalla ei tulosta alku- ja loppukuvio itse (paitsi päätä ja häntää käytettäessä)?

Vastaa

Se voi suorittaa sed

sed -n " /^aaa$/,/^cdn$/w output1 /^zdk$/,/^dke$/w output2 " file 

vastaus

Tässä on komento grep:

grep -o "aaa.*cdn" <(paste -sd_ file) | tr "_" "\n" 

Voit saavuttaa monirivisen haun grep, mutta sinun on käytettävä perl-regexp-tiedostoa grep (-P – jota ei tueta kaikilla alustoilla , kuten OS X), joten kiertotavalla korvataan uudet rivit _ -merkillä ja grep jälkeen muutamme ne takaisin.

Vaihtoehtoisesti voit käyttää pcregrep , joka tukee monirivisiä malleja (-M).

Tai käytä ex:

ex +"/aaa/,/cdn/p" -scq! file 

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *