Unix HP-UX ksh rekursives Suchen und Ersetzen

1237
user187195

Ich versuche ein rekursives Suchen und Ersetzen in HP-UX durchzuführen und etwas fehlt.

Was ich momentan habe:

find . -name "*.java" | xargs sed 's/foo/bar/g' 

Ich weiß, das Problem ist, dass die Datei nicht inline ersetzt wird. Ich glaube, bei anderen Betriebssystemen gibt es eine -i-Flagge, aber in meiner HP-UX-Version scheint es keine zu geben.

Irgendwelche Vorschläge?

3
Die direkte Bearbeitung von `sed` ist nicht POSIX. Dies erklärt, warum es für Sie nicht verfügbar ist. Sie können stattdessen Perl ausprobieren, wenn es verfügbar ist, da Perl eine `-i`-Option hat, die dasselbe tut. http://backreference.org/2011/01/29/in-place-editing-of-files/ enthält einige Informationen. Versuchen Sie einfach nicht blind etwas ohne Backup! Daniel Andersson vor 11 Jahren 1
Danke Daniel. Perl zu benutzen war der Weg, der für mich funktionierte: find. -name "* .java" | xargs perl -pi -e's / foo / bar / g ' user187195 vor 11 Jahren 1
Auch über StackOverflow gefragt: http://stackoverflow.com/q/14278552/7552 glenn jackman vor 11 Jahren 0
nimm einfach die xargs heraus und lass die sed. Tim Kennedy vor 11 Jahren 0

2 Antworten auf die Frage

1
sparkie

Sie könnten das fehlende -iProblem so umgehen (ungeprüft):

for i in `find . -name "*.java"`; do cp $i /tmp/$$; sed 's/foo/bar/g' < /tmp/$$ > $i;done 
1
glenn jackman

Sie könnten immer verwenden ed

find . -name "*.java" | while IFS= read -r file; do ed "$file" <<ED_COMMANDS %s/foo/bar/g w q ED_COMMANDS done