ein shell script mit 2 sed Aufrufen, Ausgabe wird zusammen geführt!? Warum?

kongstrong

Well-Known Member
MoinMoin,

unter FreeBSD 11.2 und der Shell: /bin/sh erhalte ich anders als erwartet eine zusammen geführte Ausgabe von 2 sed die so Aussieht:
Code:
./123.sh
one
two
four
two
three
four
one
two
three
four
five
found
found
:
Das Shellscript dazu:
Bash:
#!/bin/sh

# Matching three lines with sed
# https://www.grymoire.com/Unix/Sed.html#uh-51

cat 123.txt << EOF
one
two
four
two
three
four
one
two
three
four
five
EOF

f1(){
sed -n '
/one/ {
      N
      /two/ {
            N
            /three/ {
                    #N
                    s/one\ntwo\nthree/found/p
                    }
            }
      }
' "123.txt"
}

f2(){
# sed mit variablen test
V_ONE="one"
V_TWO="two"
V_THREE="three"
sed -n "
/$V_ONE/ {
      N
      /$V_TWO/ {
            N
            /three/ {
                    #N
                    s/$V_ONE\n$V_TWO\n$V_THREE/found/p
                    }
            }
      }
" "123.txt"
}

f1
f2

ich hatte eigentlich so eine Ausgabe erwartet:
Bash:
./123.sh
one
two
four
two
three
four
one
two
three
four
five
found   <-- Ende der ersten sed Funktion (f1)
one
two
four
two
three
four
one
two
three
four
five
found   <-- Ende der zweiten sed Funktion (f2)

Selbst wenn das Shellscript ohne Funktionen geschieben ist, (also einfach die "f1(){}" und "f1(){}" löschen) so das der Shellcode Zeile für Zeile abgearbeitet wird, selbe Ausgabe!?!

Ich kann das Verhalten der Ausgabe des Shellscriptes irgent wie nicht nach vollziehen, wo fehlt mir den jetzt die Logik ?
 
Was TCM damit sagen will, anscheinend willst Du die Daten in eine Datei schreiben, tust Du aber nicht. Du gibst stattdessen die Datei aus und hängst Deine Daten noch hinten an die Ausgabe an.
 
Zurück
Oben