Hier ist mein Befehl (absichtlich brechen):
grep FOO "/Users/gjtorikian/blah" -l | xargs sed -i '' '/FOO/{s/FOO/BAR/g; w /dev/stdout
}'
Auf hoher Ebene: grep
für FOO im blah
Verzeichnis; Pipe in nur den Dateinamen (wegen -l
) zu sed
; sed
führt ein Inline-Ersetzen ( -i ''
) durch und druckt nur den geänderten Begriff an /dev/stdout
.
Wenn ich das -l
und die Pipe weglassen würde , bekomme ich dies zurück von grep
:
/Users/gjtorikian/blah/baz.cs:1:FOO
/Users/gjtorikian/blah/bar.js:1:FOO
Ich möchte sed
das Inline-Ersetzen durchführen und mir dann die ersetzte Datei und den ersetzten Begriff anzeigen. zum Beispiel:
/Users/gjtorikian/blah/baz.cs:1:BAR
/Users/gjtorikian/blah/bar.js:1:BAR
Ist so etwas möglich? Wenn es darauf ankommt, würde ich es vorziehen, es nur mit grep
/ zu behalten sed
. Muss ich eine Sekunde grep
nach dem machen sed
?
''
, das ist die Standardeinstellung.
''
ist dies nicht die Standardeinstellung.