Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[OT] awk / mawk REPLACE STRINGS in Textfile
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum
View previous topic :: View next topic  
Author Message
benjamin200
Veteran
Veteran


Joined: 01 Feb 2004
Posts: 1426
Location: DE Munich

PostPosted: Mon Jan 23, 2006 8:30 pm    Post subject: [OT] awk / mawk REPLACE STRINGS in Textfile Reply with quote

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
View user's profile Send private message
smg
Veteran
Veteran


Joined: 13 Aug 2004
Posts: 1402
Location: /home/stephan

PostPosted: Mon Jan 23, 2006 8:38 pm    Post subject: Reply with quote

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
View user's profile Send private message
benjamin200
Veteran
Veteran


Joined: 01 Feb 2004
Posts: 1426
Location: DE Munich

PostPosted: Mon Jan 23, 2006 8:41 pm    Post subject: Reply with quote

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
View user's profile Send private message
smg
Veteran
Veteran


Joined: 13 Aug 2004
Posts: 1402
Location: /home/stephan

PostPosted: Mon Jan 23, 2006 8:45 pm    Post subject: Reply with quote

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
View user's profile Send private message
benjamin200
Veteran
Veteran


Joined: 01 Feb 2004
Posts: 1426
Location: DE Munich

PostPosted: Mon Jan 23, 2006 8:47 pm    Post subject: Reply with quote

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
View user's profile Send private message
smg
Veteran
Veteran


Joined: 13 Aug 2004
Posts: 1402
Location: /home/stephan

PostPosted: Mon Jan 23, 2006 8:50 pm    Post subject: Reply with quote

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
View user's profile Send private message
benjamin200
Veteran
Veteran


Joined: 01 Feb 2004
Posts: 1426
Location: DE Munich

PostPosted: Mon Jan 23, 2006 9:04 pm    Post subject: Reply with quote

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
View user's profile Send private message
smg
Veteran
Veteran


Joined: 13 Aug 2004
Posts: 1402
Location: /home/stephan

PostPosted: Mon Jan 23, 2006 9:07 pm    Post subject: Reply with 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. :)

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
View user's profile Send private message
benjamin200
Veteran
Veteran


Joined: 01 Feb 2004
Posts: 1426
Location: DE Munich

PostPosted: Mon Jan 23, 2006 9:10 pm    Post subject: Reply with quote

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
View user's profile Send private message
benjamin200
Veteran
Veteran


Joined: 01 Feb 2004
Posts: 1426
Location: DE Munich

PostPosted: Mon Jan 23, 2006 9:12 pm    Post subject: Reply with quote

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
View user's profile Send private message
smg
Veteran
Veteran


Joined: 13 Aug 2004
Posts: 1402
Location: /home/stephan

PostPosted: Mon Jan 23, 2006 9:13 pm    Post subject: Reply with quote

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
View user's profile Send private message
benjamin200
Veteran
Veteran


Joined: 01 Feb 2004
Posts: 1426
Location: DE Munich

PostPosted: Mon Jan 23, 2006 9:18 pm    Post subject: Reply with quote

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
View user's profile Send private message
benjamin200
Veteran
Veteran


Joined: 01 Feb 2004
Posts: 1426
Location: DE Munich

PostPosted: Mon Jan 23, 2006 9:36 pm    Post subject: Reply with quote

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
View user's profile Send private message
amne
Bodhisattva
Bodhisattva


Joined: 17 Nov 2002
Posts: 6378
Location: Graz / EU

PostPosted: Mon Jan 23, 2006 10:14 pm    Post subject: Reply with quote

Ins Diskussionsforum verschoben.
_________________
Dinosaur week! (Ok, this thread is so last week)
Back to top
View user's profile Send private message
benjamin200
Veteran
Veteran


Joined: 01 Feb 2004
Posts: 1426
Location: DE Munich

PostPosted: Mon Jan 23, 2006 10:35 pm    Post subject: Reply with quote

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
View user's profile Send private message
Fibbs
Guru
Guru


Joined: 26 Jan 2003
Posts: 448
Location: Forstern near Munich / Germany

PostPosted: Mon Jan 23, 2006 10:42 pm    Post subject: Reply with quote

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
View user's profile Send private message
benjamin200
Veteran
Veteran


Joined: 01 Feb 2004
Posts: 1426
Location: DE Munich

PostPosted: Mon Jan 23, 2006 10:49 pm    Post subject: Reply with quote

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
View user's profile Send private message
Finswimmer
Bodhisattva
Bodhisattva


Joined: 02 Sep 2004
Posts: 5467
Location: Langen (Hessen), Germany

PostPosted: Mon Jan 23, 2006 11:24 pm    Post subject: Reply with 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
Back to top
View user's profile Send private message
think4urs11
Bodhisattva
Bodhisattva


Joined: 25 Jun 2003
Posts: 6659
Location: above the cloud

PostPosted: Mon Jan 23, 2006 11:44 pm    Post subject: Reply with quote

übersehe ich hier jetzt irgendwas entscheidendes - z.B. das Problem? (ja ich weiß blöde Frage, is schon spät) :roll:

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
View user's profile Send private message
benjamin200
Veteran
Veteran


Joined: 01 Feb 2004
Posts: 1426
Location: DE Munich

PostPosted: Tue Jan 24, 2006 12:14 am    Post subject: Reply with quote

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
View user's profile Send private message
think4urs11
Bodhisattva
Bodhisattva


Joined: 25 Jun 2003
Posts: 6659
Location: above the cloud

PostPosted: Tue Jan 24, 2006 12:29 am    Post subject: Reply with quote

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
View user's profile Send private message
benjamin200
Veteran
Veteran


Joined: 01 Feb 2004
Posts: 1426
Location: DE Munich

PostPosted: Tue Jan 24, 2006 12:34 am    Post subject: Reply with quote

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
View user's profile Send private message
think4urs11
Bodhisattva
Bodhisattva


Joined: 25 Jun 2003
Posts: 6659
Location: above the cloud

PostPosted: Tue Jan 24, 2006 12:36 am    Post subject: Reply with 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.
_________________
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
View user's profile Send private message
benjamin200
Veteran
Veteran


Joined: 01 Feb 2004
Posts: 1426
Location: DE Munich

PostPosted: Tue Jan 24, 2006 12:39 am    Post subject: Reply with quote

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
View user's profile Send private message
benjamin200
Veteran
Veteran


Joined: 01 Feb 2004
Posts: 1426
Location: DE Munich

PostPosted: Thu Jan 26, 2006 5:50 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum