Ich habe etwa 8.000 Dateien und muss sie bereinigen. Ich verwende derzeit diesen Sed-Befehl, um bestimmte Zeichen durch die gewünschten zu ersetzen:
find . -name "*.txt" -print | xargs sed -i 's/a/z/g'
Dadurch werden alle a's in allen Dateien rekursiv in z's geändert. Meine Frage ist:
- Kann ich mehrere Zeichen angeben, die im Befehl abgeglichen werden sollen, um sie in z zu ändern?
- Kann ich das übereinstimmende Zeichen löschen, anstatt es in z zu ändern?
Dank im Voraus.
Antwort1
Kann ich mehrere Zeichen angeben, die im Befehl abgeglichen werden sollen, um sie in z zu ändern?
Ja, das können Sie. Dazu schließen Sie mehrere Zeichen in eckige Klammern ein:
sed -i 's/[abc]/z/g' file.txt
Dadurch werden alleA,B, UndCCharaktere mitz.
Es wird nicht ersetzenABCmitzwird es ersetzt durchzzz.
Kann ich das übereinstimmende Zeichen löschen, anstatt es in z zu ändern?
Dies ist ganz einfach, Sie ersetzen es einfach durch nichts:
sed -i 's/[abc]//g' file.txt
Dadurch werden alleA,B, UndCFiguren.
Hinweis: Diese Beispiele funktionieren in Ihrem Fall auch mit find
& .xargs
Antwort2
Beides kann mit Ja beantwortet werden:
1: Das geht mit einer sogenannten Zeichenklasse [abcde], zB
echo abcabcabc | sed -e 's/[abc]/z/g'
wobei alle drei a, b, c durch z ersetzt werden.
2: Wenn Sie durch eine leere Zeichenfolge ersetzen, werden grundsätzlich alle übereinstimmenden Zeichen gelöscht, z. B.
echo abcabcabc | sed -e 's/[ac]//g'
du bekommst nur die B's zurück.