2016-03-21 9 views
0

Ich weiß, wie Rohr stdout:Echo etwas während Verrohrung stdout

./myScript | grep 'important' 

Beispiel Ausgabe des obigen Befehl:

Very important output. 
Only important stuff here. 

Aber während grep ing würde ich auch gerne echo jeder etwas Linie so es sieht so aus:

1) Very important output. 
2) Only important stuff here. 

Wie kann ich das tun?

Edit: Anscheinend habe ich nicht gut genug, was ich tun möchte. Die Zeilennummerierung ist nur ein Beispiel, ich möchte allgemein wissen, wie man Text (beliebigen Text, einschließlich Variablen und was nicht) zur Pipe-Ausgabe hinzufügt. Ich sehe, dass man das unter Verwendung awk '{print $0}' erreichen kann, wo $0 die Lösung ist, die ich suche.

Gibt es andere Möglichkeiten, dies zu erreichen?

+0

Dies ist in keiner Weise auf die Programmierung im Zusammenhang, sondern versuchen, 'grep -n‚wichtig "". –

+0

Ich mache Gedanken lesen hier. Für Nachrichten verwenden Sie besser 'stderr', um den Fortschritt des Skripts zu informieren. Dies stört nicht den "Stout", den Sie anpinnen. – biocyberman

Antwort

2

Dies wird nummerieren Sie die Hits von 0

./myScript | grep 'important' | awk '{printf("%d) %s\n", NR, $0)}' 

1) Very important output. 
2) Only important stuff here. 

Dies gibt Ihnen die Zeilennummer des Treffers

./myScript | grep -n 'important' 

3:Very important output. 
47:Only important stuff here. 
2

Wenn Sie Zeilennummern wollen auf der neuen Ausgabe von 1..n läuft wobei n Anzahl von Zeilen in der neuen Ausgabe:

./myScript | awk '/important/{printf("%d) %s\n", ++i, $0)}' 
#    ^Grep part     ^Number starting at 1 
2

eine Lösung mit einem while Schleife ist nicht für große Dateien geeignet, so sollten Sie diese Lösung nur verwenden, wenn Sie nicht viel important Sachen haben:

i=0 
while read -r line; do 
    ((i++)) 
    printf "(%s) Look out: %s" $i "${line}" 
done < <(./myScript | grep 'important') 
Verwandte Themen