Bash -> alle zeilen eines inputs - nach Suchwort ausgeben
Bash -> alle zeilen eines inputs - nach Suchwort ausgeben
Moin,
Ich möchte die Ausgabe eines Programmes so verändern das ich nach einem Begriff suche, und alle Zeilen die nach diesem Suchwort kommen ausgegeben werden.
theo. könnte ich ja mit wc die zeilen zählen, mit grep die zeile herrausfinden in der das Suchwort vorkommt - und dann mit tail -n(gesammtzeilen - position)
Nur wüsste ich nicht wie ich den Output in mehrere anwendungen pipen kann, um Zeilen zu zählen, + nen grep zu machen...
Dann hab ich noch beim awk geschaut, aber ehrlichgesagt baucht man da wohl erste nen lehrgang :)
Hat jemand eine Idee, bzw. evtl. schon so etwas im Einsatz?
Ich möchte die Ausgabe eines Programmes so verändern das ich nach einem Begriff suche, und alle Zeilen die nach diesem Suchwort kommen ausgegeben werden.
theo. könnte ich ja mit wc die zeilen zählen, mit grep die zeile herrausfinden in der das Suchwort vorkommt - und dann mit tail -n(gesammtzeilen - position)
Nur wüsste ich nicht wie ich den Output in mehrere anwendungen pipen kann, um Zeilen zu zählen, + nen grep zu machen...
Dann hab ich noch beim awk geschaut, aber ehrlichgesagt baucht man da wohl erste nen lehrgang :)
Hat jemand eine Idee, bzw. evtl. schon so etwas im Einsatz?
Re: Bash -> alle zeilen eines inputs - nach Suchwort ausgeben
Quick&Dirty&Untestet:
Code: Select all
#!/bin/bash
searchword="SearchWord"
searchfile="/root/searchfile"
outputfile="/root/outputfile"
searchline="$(grep -n "${searchword}" ${searchfile} | head -n 1 | sed 's/:([0-9][0-9]*)/1/')"
let taillines="$(wc -l ${searchfile}) - ${searchline}"
tail -n ${taillines} ${searchfile} > ${outputfile}
exit 0
-
r. u. serious
- Posts: 88
- Joined: 2006-06-10 14:17
Re: Bash -> alle zeilen eines inputs - nach Suchwort ausgeben
Code: Select all
awk '/suchwort/ {seen = 1}; seen==1 { print $0 }' dateinameWenn du mehrere Dateien durchjagen willst, mußt du seen natürlich zu Beginn einer Datei die variable seen auf 0 setzen (FILENAME ist eine vordefinierte variable):
Code: Select all
awk 'FILENAME != oldfile {oldfile=FILENAME; seen=0}; /suchwort/ {seen = 1}; seen==1 { print $0 }' dateina*[Ändern mußt du jeweils den String "suchwort", und am Ende der Zeile die dateinamen die du an awk übergibst]
Re: Bash -> alle zeilen eines inputs - nach Suchwort ausgeben
Das ist eigentlich ein typischer awk Job, sed kann das aber auch.
Noch kürzer ;-)
Code: Select all
sed -n '/MUSTER/,$p'-
r. u. serious
- Posts: 88
- Joined: 2006-06-10 14:17
Re: Bash -> alle zeilen eines inputs - nach Suchwort ausgeben
Eek, war ja klar, dass jemand es immer noch kürzer kann. :D
Aber immerhin, wenn man mehrere Dateien übergibt (ob mit oder ohne xargs), steht die awk-Lösung wieder besser da.;)
Aber immerhin, wenn man mehrere Dateien übergibt (ob mit oder ohne xargs), steht die awk-Lösung wieder besser da.;)
Re: Bash -> alle zeilen eines inputs - nach Suchwort ausgeben
Nicht wirklich ;-). Natürlich ist sed in primär ein Streameditor für EINEN stream... Aber GNU sed hat praktische Extensions:
GNU sed und awk sind beide ziemlich fett ;-)
Code: Select all
sed --separate -n '/MUSTER/,$p' FILE1 FILE2-
r. u. serious
- Posts: 88
- Joined: 2006-06-10 14:17
Re: Bash -> alle zeilen eines inputs - nach Suchwort ausgeben
Wieder was gelernt! :)
