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