View previous topic :: View next topic |
Author |
Message |
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Mon Jan 23, 2006 8:30 pm Post subject: [OT] awk / mawk REPLACE STRINGS in Textfile |
|
|
Hallo Leute,
bin nicht gleich den Kopf abreisen, da ich awk bzw. mawk auf einem Windows System laufen lassen will / muss. Ich benötige dringends die Möglichkeit beliebige STRINGS in einer textbasierenden Datei zu änderen. Konkret geht es um *.reg Dateien. Ich weiss genau was ich will, aber nicht wie ich es mit awk / bzw. mawk (awk für Windows) machen kann. Hoffe jemand von euch kann mir helfen.
Ich möchte mit AWK / mawk beliebige STRINGS in einer textbasierenden Datei via CLI mit Parameter überagabe von austauschen / replacen. Der Dateiname, Pfad und beide Strings sollen sich über Variablen deklarieren lassen. Wie stelle ich das mit awk / mwak an?
Bsp. Eintrag der textbasierenden Datei:
Code: |
[HKLM\Software\Supertool\V-43454:445\Config\Main]
|
soll geändert werden in:
Code: |
[HKLM\Software\Supertool\V-67565:545\Config\Main]
|
Habe schon folgenden Hinweis gefunden, werde aber leider nicht daraus schau.
Quote: |
gsub(regexp, replacement [, target])
This is similar to the sub function, except gsub replaces all of the longest, leftmost, non-overlapping matching substrings it can find. The `g' in gsub stands for "global," which means replace everywhere. For example:
awk '{ gsub(/Britain/, "United Kingdom"); print }'
replaces all occurrences of the string `Britain' with `United Kingdom' for all input records. The gsub function returns the number of substitutions made. If the variable to be searched and altered, target, is omitted, then the entire input record, $0, is used. As in sub, the characters `&' and `\' are special, and the third argument must be an lvalue.
|
Bin über jeden Ratschlag dankbar. Vielen Dank schonmal an alle AWK Programmiere / Künstler die versuchen zu helfen
Gruß,
Benjamin _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
smg Veteran
Joined: 13 Aug 2004 Posts: 1402 Location: /home/stephan
|
Posted: Mon Jan 23, 2006 8:38 pm Post subject: |
|
|
Hi!
Ich gebe dir nur mal einen kleinen Ansatz:
Probiere doch einfach mal zu matchen und dann gsub anzuwenden.
Quote: | awk ' /fubar/{ gsub(/fubar/, "foo?"); print } ' |
sowas?
Vielleicht kannst du es auch einfach mit sed realisieren.
Bye. _________________ GnuPG-Key-ID: 0xF8C275D4
Fingerprint: 5B6F 134A 189B A24D 342B 0961 8D4B 0230 F8C2 75D4
Code: | perl -WTe '($")=$/;print qq(@{[reverse('0'..'100')]}$/BOOM!$/);' |
Last edited by smg on Mon Jan 23, 2006 8:45 pm; edited 1 time in total |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Mon Jan 23, 2006 8:41 pm Post subject: |
|
|
Quote: |
Ich gebe dir nur mal einen kleinen Ansatz:
|
Verrate mir doch wie es funktioniert, der kleine Ansatz bring einen Neuling im Programmieren auch nicht weiter
Quote: |
Probiere doch einfach mal mit ~= zu matchen und dann gsub anzuwenden.
|
Matchen, häää, verstehe nur Bahnhof.
Quote: |
Vielleicht kannst du es auch einfach mit sed realisieren.
|
sed? Ich möchte es mit mawk auf Windows realisieren.
Kann mir jemand bitte den Befehl verraten? _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
smg Veteran
Joined: 13 Aug 2004 Posts: 1402 Location: /home/stephan
|
Posted: Mon Jan 23, 2006 8:45 pm Post subject: |
|
|
Btw, wie sieht denn dein String aus, welches Muster hat er?
Code: |
awk ' { if ($0 ~ /your_regex_here/); print } ' $FILE
|
Bye. _________________ GnuPG-Key-ID: 0xF8C275D4
Fingerprint: 5B6F 134A 189B A24D 342B 0961 8D4B 0230 F8C2 75D4
Code: | perl -WTe '($")=$/;print qq(@{[reverse('0'..'100')]}$/BOOM!$/);' |
Last edited by smg on Mon Jan 23, 2006 8:48 pm; edited 1 time in total |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Mon Jan 23, 2006 8:47 pm Post subject: |
|
|
hatte ich oben erwähnt:
Quote: |
Bsp. Eintrag der textbasierenden Datei:
Code:
[HKLM\Software\Supertool\V-43454:445\Config\Main]
soll geändert werden in:
Code:
[HKLM\Software\Supertool\V-67565:545\Config\Main]
|
_________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
smg Veteran
Joined: 13 Aug 2004 Posts: 1402 Location: /home/stephan
|
Posted: Mon Jan 23, 2006 8:50 pm Post subject: |
|
|
43454:445 <-- das soll geändert werden
67565:545 <-- in das?
nur das in das? oder sonst noch was?
dann würde ich vorschlagen
Code: | awk ' { if ($0 ~ /43454:445/); gsub(/43454:445/, "67565:545"); print } ' $FILE > $FILE |
Pattern kannst du einfach als zwei Variablen defineiren und dann in das gsub reinhaue, jedoch dann doppelte Anführungszeichen wegen dem Interpolieren, und manche Sachen escapen da sie von der $SHELL interpretiert werden könnten.
Bye.
P.S.: Steht dir denn kein Sed zu Verfügung? Weil sonst müsstest du die awk Ausgabe in ne Datei wieder umleiten, bei sed gibt's den -i switch dafür..
P.P.S.: Hilfst dir das denn wenigstens bisschen? _________________ GnuPG-Key-ID: 0xF8C275D4
Fingerprint: 5B6F 134A 189B A24D 342B 0961 8D4B 0230 F8C2 75D4
Code: | perl -WTe '($")=$/;print qq(@{[reverse('0'..'100')]}$/BOOM!$/);' |
|
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Mon Jan 23, 2006 9:04 pm Post subject: |
|
|
Quote: |
43454:445 <-- das soll geändert werden
67565:545 <-- in das?
nur das in das? oder sonst noch was?
|
Das wäre es
Quote: |
P.S.: Steht dir denn kein Sed zu Verfügung? Weil sonst müsstest du die awk Ausgabe in ne Datei wieder umleiten, bei sed gibt's den -i switch dafür..
|
Gibt es sed auch als binary für Windows?
Quote: |
P.P.S.: Hilfst dir das denn wenigstens bisschen?
|
unter awk auf Linux läuft es, genial jetzt noch mit mawk testen. Müssten doch die selben Parameter sein ***Daumendrück*** _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
smg Veteran
Joined: 13 Aug 2004 Posts: 1402 Location: /home/stephan
|
Posted: Mon Jan 23, 2006 9:07 pm Post subject: |
|
|
Oh, sorry. Ich überlese wohl immer wieder (mit Absicht?!), dass du ja diese Sache auf Windows laufen lassen musst. Ich weiß nicht ob es ein Binary für Sed für Windows gibt - wohl nicht.
Sed wäre halt _schöner_ aber da es ja nicht verfügbar ist hält eben mawk her.
Kann man sicherlich noch verbessern den awk Befehl.
Bye. _________________ GnuPG-Key-ID: 0xF8C275D4
Fingerprint: 5B6F 134A 189B A24D 342B 0961 8D4B 0230 F8C2 75D4
Code: | perl -WTe '($")=$/;print qq(@{[reverse('0'..'100')]}$/BOOM!$/);' |
|
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Mon Jan 23, 2006 9:10 pm Post subject: |
|
|
Wie schön erwähnt läuft es unter Linux, aber mit mawk will es nicht.
Code: |
D:\mawk32>mawk ' { if ($0 ~ /43454:445/); gsub(/43454:445/, "67565:545"); print
} ' D:\mawk32\test.txt > D:\mawk32\test1.txt
|
Kann jemand mit dieser Fehler Meldung etwas anfangen?
Code: |
mawk: line 1: runaway string constant " ...
|
_________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Mon Jan 23, 2006 9:12 pm Post subject: |
|
|
Quote: |
Oh, sorry. Ich überlese wohl immer wieder (mit Absicht?!), dass du ja diese Sache auf Windows laufen lassen musst. Ich weiß nicht ob es ein Binary für Sed für Windows gibt - wohl nicht.
|
Kein Problem, aber leider läuft es unter Windoof mit mawk nicht. Die Fehlermeldung bring mich leider nicht weiter (siehe oben).
Fählt dir noch was ein? Falls du es auch probieren will (auf windoof oder mit wine) Hier der Link zu den Sourcen v1.3.3.
Sourcen: http://www.klabaster.com _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
smg Veteran
Joined: 13 Aug 2004 Posts: 1402 Location: /home/stephan
|
Posted: Mon Jan 23, 2006 9:13 pm Post subject: |
|
|
Probier mal das:
Code: | mawk ' { if ($0 ~ /43454:445/) gsub(/43454:445/, 67565:545); print } ' "$FILE" > "$FILE" |
Vielleicht geht es damit.. _________________ GnuPG-Key-ID: 0xF8C275D4
Fingerprint: 5B6F 134A 189B A24D 342B 0961 8D4B 0230 F8C2 75D4
Code: | perl -WTe '($")=$/;print qq(@{[reverse('0'..'100')]}$/BOOM!$/);' |
|
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Mon Jan 23, 2006 9:18 pm Post subject: |
|
|
Die Pfade zu maskieren hatte ich schon probiert aber hier nochmal. Selbe Fehlermeldung
Code: |
mawk ' { if ($0 ~ /43454:445/) gsub(/43454:445/, 67565:545); print } ' "D:\mawk32\test.txt" > "D:\mawk32\test1.txt"
D:\mawk32>mawk ' { if ($0 ~ /43454:445/) gsub(/43454:445/, 67565:545); print } '
"D:\mawk32\test.txt" > "D:\mawk32\test1.txt"
|
Code: |
mawk: line 1: runaway string constant " ...
|
Gibt es einen einfach PRINT Befehl, z.B. HELLO WORLD oder so? _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Mon Jan 23, 2006 9:36 pm Post subject: |
|
|
hat noch jemand eine Idee? _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
amne Bodhisattva
Joined: 17 Nov 2002 Posts: 6378 Location: Graz / EU
|
Posted: Mon Jan 23, 2006 10:14 pm Post subject: |
|
|
Ins Diskussionsforum verschoben. _________________ Dinosaur week! (Ok, this thread is so last week) |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Mon Jan 23, 2006 10:35 pm Post subject: |
|
|
ist aber viel weniger los hier
Hoffe jemand ließt noch meinen Thread _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
Fibbs Guru
Joined: 26 Jan 2003 Posts: 448 Location: Forstern near Munich / Germany
|
Posted: Mon Jan 23, 2006 10:42 pm Post subject: |
|
|
Ohne mich jetzt mit awk auszukennenn....
wäre es nicht eine Möglichkeit, auf den Windows-Kübel cygwin zu installieren und dann doch sed zu benutzen?
Gruß
Fibbs |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Mon Jan 23, 2006 10:49 pm Post subject: |
|
|
Servus Fibbs,
ja wäre es, da ich diesen REPLACE zur editierung benötige. Es gibt keine Möglichkeit cygwin zu installieren.
Es soll alles über ein Skript abgewickelt werden.
Kennst du dich etwas mit awk bzw. mawk aus? _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
Finswimmer Bodhisattva
Joined: 02 Sep 2004 Posts: 5467 Location: Langen (Hessen), Germany
|
Posted: Mon Jan 23, 2006 11:24 pm Post subject: |
|
|
Nach google groups:
Perhaps the problem is the slash in the [...] class; mawk seems to be
taking it to denote the end of the regular expression.
Scheint also an der Win Version von mawk zu liegen.
Versuchs mal mit nem Backslash |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Mon Jan 23, 2006 11:44 pm Post subject: |
|
|
übersehe ich hier jetzt irgendwas entscheidendes - z.B. das Problem? (ja ich weiß blöde Frage, is schon spät)
SED für Windows ... so gesucht: Wie find ichs; 2. Treffer
Code: | D:\>more test.txt
[HKLM\Software\Supertool\V-43454:445\Config\Main]
bla
nochwas
[HKLM\Software\Supertool\O-43454:445\Config\Main]
ende
D:\>c:sed -e s/43454:445/67565:545/g test.txt
[HKLM\Software\Supertool\V-67565:545\Config\Main]
bla
nochwas
[HKLM\Software\Supertool\O-67565:545\Config\Main]
ende |
_________________ Nothing is secure / Security is always a trade-off with usability / Do not assume anything / Trust no-one, nothing / Paranoia is your friend / Think for yourself |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Tue Jan 24, 2006 12:14 am Post subject: |
|
|
Code: |
mawk ' { if ($0 ~ /43454:445/) gsub(/43454:445/, 67565:545); print } ' "D:\mawk32\test.txt" > "D:\mawk32\test1.txt"
|
Quote: |
Nach google groups:
Perhaps the problem is the slash in the [...] class; mawk seems to be
taking it to denote the end of the regular expression.
Scheint also an der Win Version von mawk zu liegen.
Versuchs mal mit nem Backslash |
wohin soll der Backsplash?
Quote: |
übersehe ich hier jetzt irgendwas entscheidendes - z.B. das Problem? (ja ich weiß blöde Frage, is schon spät)
SED für Windows ... so gesucht: Wie find ichs; 2. Treffer
|
Bin mir nicht sicher was du mit den letzen Zeilen anstellen willst? HIV Keys bearbeiten / kopieren / editieren? Kannst du mir vielleicht ein simples Example Comand für den Replace Befehl schicken? _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Tue Jan 24, 2006 12:29 am Post subject: |
|
|
benjamin200 wrote: | Bin mir nicht sicher was du mit den letzen Zeilen anstellen willst? HIV Keys bearbeiten / kopieren / editieren? Kannst du mir vielleicht ein simples Example Comand für den Replace Befehl schicken? |
Das Beispiel tut nichts anderes als in einer gegebenen Textdatei (d:\test.txt) die Zeichenfolge 43454:445 gegen 67565:545 auszutauschen und zwar überall wo es gefunden wird, was eben in SED-Syntax s/43454:445/67565:545/g heißt.
Wenn du z.B. nur das fünfte Erscheinen dieser Zeichenfolge austauschen möchtest, die ersten 4 aber nicht angetastet werden sollen so ist das 'g' durch eine '5' auszutauschen.
Kleines deutsches HowTo für sed: http://www.linux-fuer-alle.de/doc_show.php?docid=181&catid=8
Das war doch was du wolltest oder nicht? _________________ Nothing is secure / Security is always a trade-off with usability / Do not assume anything / Trust no-one, nothing / Paranoia is your friend / Think for yourself
Last edited by think4urs11 on Tue Jan 24, 2006 12:37 am; edited 2 times in total |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Tue Jan 24, 2006 12:34 am Post subject: |
|
|
ja genau. Werde es morgen gleich testen und mich wieder melden. Vielen Dank nochmal.
Was mich aber denoch brennend interessiert, wie läuft das ganze mit mawk. Irgenwas Stimm in dem Syntax nicht. Unter ACK 1.3.3 Gentoo läuft es sauber, aber mit mawk, gawk etc. klappt es nicht. Wo muss ich den Backslash setzen bzw. gegen was tauschen? _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Tue Jan 24, 2006 12:36 am Post subject: |
|
|
bei awk muß ich passen; benutze ich nur wenn es gar nicht mehr anders geht.
Meistens geht das was ich so brauche auch ohne. _________________ Nothing is secure / Security is always a trade-off with usability / Do not assume anything / Trust no-one, nothing / Paranoia is your friend / Think for yourself |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Tue Jan 24, 2006 12:39 am Post subject: |
|
|
Quote: |
bei awk muß ich passen; benutze ich nur wenn es gar nicht mehr anders geht.
Meistens geht das was ich so brauche auch ohne.
|
werd es auf jedenfalls morgen mit sed probieren. Danke nochmal Think4UrS11.
Achja, wenn noch jemand bezüglich mawk weiterhelfen kann, bitte POSTEN. DANKE _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Thu Jan 26, 2006 5:50 pm Post subject: |
|
|
BUMP _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
|