Die Anzahl von einem spezifischen Wort in einer Zeile anzeigen

C

corsa12

Grünschnabel
Hallo,

ich habe ein eigentlich simples Problem, wofür ich aber nirgendwo eine Lösung gefunden habe.
Ich habe eine Datei, wo ich nach einem Ausdruck suchen möchte und die Anzahl pro Zeile ausgeben möchte.
So nach dem Motto:
"in der Zeile X kommt das Wort ABC Z mal vor."
"in der Zeile Y kommt das Wort ABC X mal vor."
etc.
grep findet nur die Zeile, aber zeigt mir nicht die Anzahl...

Weiss jemand einen guten Einzeiler (ohne "in der Zeile...", die Zahl reicht mir) dafür?

Danke im Vorraus!

Alex
 
hi,

ich wuerde mir wahrscheinlich mit grep die Zeile ausgeben lassen, mit sed alles bis auf die gesuchten Woerter filtern, und dann mit wc die woerter zaehlen. Geht aber sicher auch anders.

mfg,
bytepool
 
Schnellschuß mit perl:

Code:
$ echo "abc abc abc bef"|perl -nle 'print (s/(abc)/$1/g)'
3
 
hi,

ich merke gerade, dass es doch nicht ganz so einfach ist wie ich dachte, da die Bash bei command substitution ja die letzten \n's immer abschneidet. Damit funktioniert ein simples
Code:
for line in $(grep $word $datei)
wie es mir vorschwebte schonmal nicht. Das waere dann ja nur noch eine Zeile, da koennte man auch gleich ein "grep -o $word $datei | wc -w" machen...
Ich muss mich also revidieren, ich wuerde es wahrscheinlich direkt komplett in Perl machen, finde ich einfacher ;)
Ausser obskuren Umwegen wie mit sed einen extra delimiter (z.B. <eol>) an jedes Zeilen Ende anzufuegen (sed 's/$/<eol>/') und die Zeilen dann Stueck fuer Stueck zu extrahieren und abzuarbeiten wuerde mir dazu auch nichts einfallen. Aber geht das nicht auch irgendwie einfacher mit Shellmitteln?

mfg,
bytepool
 
Naja mit GNU grep geht auch das
Code:
$ cat datei
abc cda ab cda abc
cda bdf foo bar
efg hij abc cba bc


$ while read line; do echo $line|grep -o 'abc'|wc -l; done < datei
2
0
1
Die null kann man noch rausfiltern
Die Shell selbst ist aber nicht so stark in Textverarbeitung, deshalb gibt es schon lange solche tools wie ed sed awk und perl.

Gruß Wolfgang
 
Naja mit GNU grep geht auch das
Code:
$ cat datei
abc cda ab cda abc
cda bdf foo bar
efg hij abc cba bc


$ while read line; do echo $line|grep -o 'abc'|wc -l; done < datei
2
0
1

bei mir (Solaris Unix) ist die Option -o leider nicht verfügbar!!! :(
 

Ähnliche Themen

Keine grafische Oberfläche (Debian Installation)

Server-Monitoring mit RRDTool

Zurück
Oben