Hallo, ich muss in ca. 800 Dateien das Muster (regex) "1.........T..........7499" in "1.........A..........7499" ändern. Wie kann ich das machen? Ich vermute das das mit sed geht leider habe ich nicht die richtige Ersetzungsregel gefunden... Ich suche das Muster 1[9 beliebige Zeichen]T[10 beliebige Zeichen]7499 und möchte gegen 1[9 beliebige Zeichen]A[10 beliebige Zeichen]7499 tauschen und das in allen Dateien die mit I* beginnen im aktuellen Verzeichnis. Kann mir jemand helfen das Problem zu lösen? mein Kernproblem ist wie ich nur T gegen A tausche den Rest des Musters aber beibehelte. Schon jetzt vielen Dank Michael This e-mail (and/or attachments) is confidential and may be privileged. Use or disclosure of it by anyone other than a designated addressee is unauthorized. If you are not an intended recipient, please delete this e-mail from the computer on which you received it. We thank you for notifying us immediately.
Michael Hoeller wrote:
ich muss in ca. 800 Dateien das Muster (regex) "1.........T..........7499" in "1.........A..........7499" ändern. Wie kann ich das machen? Ich vermute das das mit sed geht leider habe ich nicht die richtige Ersetzungsregel gefunden... Ich suche das Muster 1[9 beliebige Zeichen]T[10 beliebige Zeichen]7499 und möchte gegen 1[9 beliebige Zeichen]A[10 beliebige Zeichen]7499 tauschen und das in allen Dateien die mit I* beginnen im aktuellen Verzeichnis.
Kann mir jemand helfen das Problem zu lösen? mein Kernproblem ist wie ich nur T gegen A tausche den Rest des Musters aber beibehelte.
Der sed-Befehl koennte wie folgt lauten: sed 's/\(1.\{9\}\)T\(.\{10\}7499\)/\1A\2/g' Den Rest kannst Du mit einer Schleife ueber alle Dateien, die mit "I" beginnen, erschlagen... Die Sequenzen zwischen \( und \) koennen durch \1 usw. referenziert werden. HTH, Th.
Hallo, Am Sun, 24 Apr 2005, Thomas Hertweck schrieb:
Michael Hoeller wrote:
ich muss in ca. 800 Dateien das Muster (regex) "1.........T..........7499" in "1.........A..........7499" ändern. Wie kann ich das machen? Ich vermute das das mit sed geht leider habe ich nicht die richtige Ersetzungsregel gefunden... Ich suche das Muster 1[9 beliebige Zeichen]T[10 beliebige Zeichen]7499 und möchte gegen 1[9 beliebige Zeichen]A[10 beliebige Zeichen]7499 tauschen und das in allen Dateien die mit I* beginnen im aktuellen Verzeichnis.
Kann mir jemand helfen das Problem zu lösen? mein Kernproblem ist wie ich nur T gegen A tausche den Rest des Musters aber beibehelte.
Der sed-Befehl koennte wie folgt lauten: sed 's/\(1.\{9\}\)T\(.\{10\}7499\)/\1A\2/g' Den Rest kannst Du mit einer Schleife ueber alle Dateien, die mit "I" beginnen, erschlagen... Die Sequenzen zwischen \( und \) koennen durch \1 usw. referenziert werden.
Ich nehm bei sowas dann gerne perl ;) perl -pi -e 's/^(1.{9})T(.{10}7499)$/$1A$2/' I* Das erspart es einem, selber die Dateien zu kopieren: for f in I*; do cp "$f" "${f}.orig" \ && sed 's/^\(1.\{9\}\)T\(.\{10\}7499\)$/\1A\2/' \ < "${f}.orig" > "$f" \ && rm "${f}.orig" done BTW: cp und nicht mv damit die Rechte erhalten bleiben. -dnh -- I have wondered what would be outside the universe. Half a step after "a different kind of nothing", I stopped. -- M. Wiltink
Hallo, Am Tue, 26 Apr 2005, Peter Wiersig schrieb:
On Sun, Apr 24, 2005 at 06:50:47PM +0200, David Haller wrote:
Das erspart es einem, selber die Dateien zu kopieren:
sed hat inzwischen auch einen -i Parameter. Willkommen in 2005, David ;)
*Huch*[tm] Naja, solange man daran denkt, dass es das nur bei nem aktuellen GNU sed gibt und das nicht in scripte reinschreibt... Und man kann bei sed eben nur umstaendlich die Version pruefen, bei perl geht eben z.B. 'require 5.005;'... -dnh -- Treffen sich zwei Viren im Outlook. Meint der eine "eigentlich bin ich ja Künstler..."
participants (4)
-
David Haller
-
Michael Hoeller
-
Peter Wiersig
-
Thomas Hertweck