suchen und mit externem Programm ersetzen

17/10/2013 - 23:29 von Cyrus Kriticos | Report spam
Hallo,

hat jemand eine Idee wie ich unter Linux in einer Textdatei die Treffer
eines regulàren Ausdrucks (z.B. foo:#[0-9a-f]*) an ein Programm als
erstes Argument übergeben kann und die Ausgabe dieses Programms genau an
der Stelle des jeweiligen Treffers wieder einsetzen kann? Es können pro
Zeile auch mehrere Treffer möglich sein. Ein "sed -f script-file" ist
leider nicht möglich.

Der Text könnte wie folgt aussehen:

Lorem ipsum dolor foo:#1234ff sit amet, consetetur
foo:#123456 elitr, sed diam nonumy foo:#12aa12 fro
invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero foo:#2c3d44 et accusam
et justo duo dolores et ea rebum. Stet clita kasd
gubergren, no sea takimata sanctus est Lorem ipsum
dolor sit amet. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr, sed diam foo:#00ff0a
nonumy eirmod tempor invidunt ut labore et dolore
magna aliquyam erat, sed diam voluptua. At vero.

Grüße | Gollum der Veganer: http://youtu.be/Ax0uzR9NNbk
Cyrus |
 

Lesen sie die antworten

#1 Sascha Hüdepohl
18/10/2013 - 10:51 | Warnen spam
Hallo

Cyrus Kriticos schrieb:

hat jemand eine Idee wie ich unter Linux in einer Textdatei die
Treffer eines regulàren Ausdrucks (z.B. foo:#[0-9a-f]*) an ein
Programm als erstes Argument übergeben kann und die Ausgabe dieses
Programms genau an der Stelle des jeweiligen Treffers wieder
einsetzen kann?



Wàre etwas python akzeptabel?

Script i.py:
#!/usr/bin/env python
import subprocess, shlex, sys, re
cmd = sys.argv[1]
def f1(a):
c = cmd + " \"'" + a.group(1) + "'\""
return subprocess.Popen(
shlex.split(c), stdout = subprocess.PIPE
).communicate()[0]
print(re.sub(r'#([0-9a-f]*)', f1, sys.stdin.read()))


$ cat i
Lorem ipsum dolor foo:#1234ff sit amet, consetetur
foo:#123456 elitr, sed diam nonumy foo:#12aa12 fro
invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero foo:#2c3d44 et accusam
et justo duo dolores et ea rebum. Stet clita kasd
gubergren, no sea takimata sanctus est Lorem ipsum
dolor sit amet. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr, sed diam foo:#00ff0a
nonumy eirmod tempor invidunt ut labore et dolore
magna aliquyam erat, sed diam voluptua. At vero.

$ ./i.py "echo -n" < i
Lorem ipsum dolor foo:'1234ff' sit amet, consetetur
foo:'123456' elitr, sed diam nonumy foo:'12aa12' fro
invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero foo:'2c3d44' et accusam
et justo duo dolores et ea rebum. Stet clita kasd
gubergren, no sea takimata sanctus est Lorem ipsum
dolor sit amet. Lorem ipsum dolor sit amet,
consetetur sadipscing elitr, sed diam foo:'00ff0a'
nonumy eirmod tempor invidunt ut labore et dolore
magna aliquyam erat, sed diam voluptua. At vero.


HTH & HAND
sascha

Ähnliche fragen