# egrep grep sed und co. parsen einer datei



## tplanitz (2. August 2007)

Hallo,

hoffentlich könnt ihr mir helfen:
Thema: *.htm Datei soll durchsucht werden und folgendes finden

*-- DAS_SOLL_GEFUNDEN_WERDEN
-- MICHBITTEAUCHFINDEN*

Das sind meine beiden suchpattern. Es sollen also nur wörter gefunden werden mit Großbuchstaben b.z.w. Wörter mit Großbuchstaben UND Unterstrichen.

Folgendes habe ich in der Shell geschrieben:

```
egrep '_+* | [A-Z]+' test4  | sed s/'[a-z]//g;s/&;//g;s/<[^<>]*>'//g
```

Dabei ist test4 der dateiname. Ich wäre auch für jede andere Idee offen haubtsache ich komme weiter. Derzeit werden mir noch Leerzeilen und einzelne Großbuchstaben sowie alle anderen Zeichen angezeigt  .

Es wäre klasse wenn ihr mit helfen könntet, bin am Ende meines Lateins.


----------



## deepthroat (6. August 2007)

Hi.

Versuch's mal so:

```
# bsp.sed

: begin

s/^[^A-Z_]*//
h 
s/^\([A-Z_][A-Z_]*\).*/\1/p
t loop
n

: loop
g
s/^[A-Z_]*\([^A-Z_]\)/\1/
t begin
```
Aufruf dann 
	
	
	



```
sed -nf bsp.sed test4
```
Gruß


----------



## tplanitz (8. August 2007)

Hallo deepthroat,

mensch super das hat geklappt. Es fehlt jetzt nur noch eine kleine nuance. Wie schaffe ich es das nur ab einer Anzahl von 3 'GROSSBUCHSTABEN' die ausgabe erfolgt. Ich habe gelesen das man eine Anzahl von treffern vorgeben kann. Leider komme ich mit der Syntax nicht klar. Es funktioniert leider nicht:

grep '^[A-Z]\{3\}' datei.txt

Kannst du mir hier  noch einen kleinen Tip geben ?

Vielen Dank


----------



## deepthroat (8. August 2007)

Hi.





tplanitz hat gesagt.:


> mensch super das hat geklappt. Es fehlt jetzt nur noch eine kleine nuance. Wie schaffe ich es das nur ab einer Anzahl von 3 'GROSSBUCHSTABEN' die ausgabe erfolgt. Ich habe gelesen das man eine Anzahl von treffern vorgeben kann. Leider komme ich mit der Syntax nicht klar. Es funktioniert leider nicht:
> 
> grep '^[A-Z]\{3\}' datei.txt


Dein Pattern würde jetzt nur am Zeilenanfang mit 3 Großbuchstaben übereinstimmen. Ist es das was du willst? Wenn nicht, lass halt einfach das ^ Zeichen weg.

Das würde aber dein Problem nicht lösen, denn jetzt wird zwar jede Zeile wo keine 3 Großbuchstaben hintereinander stehen gefiltert, sed wird aber für jede Zeile die von grep ausgegeben wird wieder alle Wörter aus Großbuchstaben ausgeben - ob es nun 1, 2, 3 oder mehr Buchstaben sind...

Ich hab das sed Skript nochmal etwas angepasst:
	
	
	



```
# bsp2.sed
: begin
h
s/^\([A-Z_][A-Z_][A-Z_][A-Z_]*\).*/Match: \1/p
t dummy
: dummy
g
s/^[A-Z_]*[^A-Z_][^A-Z_]*//
t begin
```
Gruß


----------

