Forum: PC Hard- und Software Mit sed suchen und das gefundene bei der ausgabe wiederverwenden.


von Mr. P. (mr-pi) Benutzerseite


Lesenswert?

Hallo zusammen,


ich möchte mit sed eine Liste mit Nummer durchsuchen,
und vor alle Nummern, die mit 473 beginnen und noch 2 weiter Zeichen 
haben,
ein --- schreiben.
Des weiteren soll hinter den Treffern ein ... erscheinen.

Ich habe es mit
1
sed 's/473../---.....\.\.\./g'
und ähnlichen versucht aber alles falsch.

Für eine Lösung wäre ich Dankbar,
   Mr. Pi

von Sabine (Gast)


Lesenswert?

sabine@phenom-ubuntu:~$ cat file1.txt
12345
473xxxx
47312
473ab
8765432

sabine@phenom-ubuntu:~$ awk '{ if ( $0 ~ /^473..$/ ) { print "---" $0 
"..." ; } else { print ; } }' file1.txt
12345
473xxxx
---47312...
---473ab...
8765432

sabine@phenom-ubuntu:~$ awk '{ if ( $0 ~ /^473..$/ ) { print "---" $0 
"..." ; } else { print ; } }' file1.txt > new_file.txt



Ist es das, was Du willst?

von Spade, Sam (Gast)


Lesenswert?

Kann man auch mit der bash machen. Ungefähr so:

modify ()
{
  while read line
  do
    if [[ "$line" ==  "*473??" ]]; then
      line="---"${line#473??}
    fi
    echo $line
  done < "myfile"
}

von Sabine (Gast)


Lesenswert?

@ Spade, Sam :

Ich habe es ausprobiert: Dein Script funktioniert nicht. Also wirklich 
nur "ungefähr so".

@ all :
Es würde mich aber interessieren, ob man es in der Art in der bash 
hinbekommt. Könnte das Problem ein bach-Erfahrener mal lösen?

von Mr. P. (mr-pi) Benutzerseite


Lesenswert?

Danke,

für die Antworten, nur brauche ich leider eine bash Lösung die immer 
geht,
read schmiert leider das ein oder andere mal ab, warum weis keiner.

Also trotzdem Danke, vor allen dir Sabine, deine Lösung tut und falls 
sich keine andere findet, muss ich halt darum betteln, das 'awk' in 
meine shell mit aufgenommen wird :-( .

Vielleicht findet Ja noch irgend ein Bastler die Lösung.


Mit freundlichen Grüßen,
   Mr. Pi

von Vlad T. (vlad_tepesch)


Lesenswert?

meinst du so?
1
G:\>cat test1.txt | sed "s/^\(473..\)$/---\1.../"
2
12345
3
473xxxx
4
---47312...
5
---473ab...
6
8765432

von Tom K. (ez81)


Lesenswert?

1
$ cat f1.txt 
2
12345
3
473xxxx
4
47312
5
473ab
6
8765432
7
147300
8
9
$ cat f1.txt | sed -r -e's/^(473..)$/---\1.../g'
10
12345
11
473xxxx
12
---47312...
13
---473ab...
14
8765432
15
147300

Tut das, was du willst?

Grüße


EDIT: Mist, zu langsam ;)

von Mr. P. (mr-pi) Benutzerseite


Lesenswert?

DANK,

es geht und das auch noch mit sed ihr seit meine Helden, BEIDE.
(auch wenn der eine nicht so schnell geschrieben hat ;-) ).

Mit freundlichen Grüßen,
   Mr. Pi

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.