Code: Select all
sed 's/ABC/123/g' test.txtAber wie mache ich das, wenn ich "ABC" durch "123" nur in den Zeilen ersetzen will, die mit "XYZ" beginnen?
Code: Select all
sed 's/ABC/123/g' test.txt
Code: Select all
sed -e '/^XYZ.*/s/ABC/123/g' test.txtDas ist gefährlich, weil zuerst die Datei test.txt durch die Shell geöffnet und geleert wird. Erst danach öffnet sed die nun leere Datei:Max Steel wrote:sed -e '/^XYZ.*/s/ABC/123/g' test.txt > test.txt
Code: Select all
stefan@mrsteven-mobil tmp $ cat << EOF > test.txt
> abcd
> efg
> hijk
> EOF
stefan@mrsteven-mobil tmp $ sed -e 's/abcd/ersetzt/' test.txt
ersetzt
efg
hijk
stefan@mrsteven-mobil tmp $ sed -e 's/abcd/ersetzt/' test.txt > test.txt
stefan@mrsteven-mobil tmp $ cat test.txt
stefan@mrsteven-mobil tmp $

Code: Select all
$ echo "ABC
> ABC
> XYZ ABC
> ABC " > test
$ echo $(sed -e '/^XYZ.*/s/ABC/123/g' test)
ABC ABC XYZ 123 ABC
Code: Select all
db.foo -> db.myFunc("foo")
db.bar -> db.myFunc("bar")
db.bla -> db.myFunc("bla")Code: Select all
db.someFunc()
db.anotherFunc("stringargument")
db.yetAnotherFunc({a: 3})Code: Select all
db\.([a-zA-Z0-9]*\w*[^\)])Wieso sollte es? Du liest 'db.' dann eine beliebige Anzahl alphanumerischer Zeichen, gefolgt von einer beliebigen Anzahl alphanumerischer Zeichen und dann ein Zeichen, das kein ')' ist.manuels wrote:en sed-Ausdruck zu Unterscheidung von Funktionen und Properties zu basteln.
Wieso klappt z.B. das hier nicht:Code: Select all
db\.([a-zA-Z0-9]*\w*[^\)])
Code: Select all
>echo 'db.bar db.LaEnGER; db.foo("test") db.a' | perl -pe 's/db\.(\w+)(?![(\w])/db.myFunc("\1")/g'
db.myFunc("bar") db.myFunc("LaEnGER"); db.foo("test") db.myFunc("a")Code: Select all
echo 'db.bar db.LaEnGER; db.foo("test") db.a' | sed -r 's/db\.(\w+)([ ;\n]|$)/db.myFunc("\1")\2/g'
db.myFunc("bar") db.myFunc("LaEnGER"); db.foo("test") db.myFunc("a")Also wenn du Properties matchen willst, sollte das wohl ehermanuels wrote:Code: Select all
db\.([a-zA-Z0-9]*\w*[^\)])
Code: Select all
db\.\([-_a-zA-Z0-9]\+\)\( |$\)3PO wrote:Aber wie gehe ich vor, wenn ich "foo_" am Anfang aller Zeilen einfügen will, ausser(!) bei Zeilen, die z.B. mit einem Doppelpunkt beginnen?
Code: Select all
sed -e '/^:/!{s/^/foo_/}'Nur der Vollständigkeit halber.mv wrote:3PO wrote:Aber wie gehe ich vor, wenn ich "foo_" am Anfang aller Zeilen einfügen will, ausser(!) bei Zeilen, die z.B. mit einem Doppelpunkt beginnen?Code: Select all
sed -e '/^:/!{s/^/foo_/}'
Code: Select all
sed 's/foo_ *//'
ist der doppelpunkt nach dem dateinamen auch immer vorhanden? Wenn ja könnte man auch was mit "cut" machen.Max Steel wrote:Mal eben eine Frage, und zwar habe ich die Ausgabe von grep samt filename.
Und möchte für die Weiterverarbeitung nur die Filenamen (ob mehrmals vorhanden oder nicht) weiterverwenden.
Wie lässt sich das am einfachsten machen (alle Filenamen haben die gleiche Struktur: f[0-9]*.txt
bsp:
f21292056.txt:From: <abc@abc.de>
Ab dem Filenamen ist der zweite Teil Variabel.
Code: Select all
echo "f21292056.txt:From: <abc@abc.de>" | cut -d':' -f0
Jupp. der Doppelpunkt ist immer vorhanden (wie schon gesagt, ein Output von grep mit dateinamen).firefly wrote:ist der doppelpunkt nach dem dateinamen auch immer vorhanden? Wenn ja könnte man auch was mit "cut" machen.
folgendes ungetestet bin gerade nicht an einem rechner mit ner unix shellCode: Select all
echo "f21292056.txt:From: <abc@abc.de>" | cut -d':' -f0
Ne das mit -f1 kann schon passen, wie schon gesagt die beispielzeile hatte ich einfach aus dem kopf geschrieben, da ich aktuell keinen zugriff auf eine unix/linux shell habe.Max Steel wrote:Super so funktioniert das (ich weiß nicht ob das am Windows-unxutils-cut liegt aber ich musste -f1 auswählen, vll einfach ein Kompatibiltätsquatsch seitens Windows.)
Code: Select all
sed -e 's/;.*$//'Code: Select all
sed -e 's/;.*$/.abc/'