Löschen Sie in Ubuntu rekursiv ein bestimmtes Zeichen/bestimmte Zeichen aus Dateien

Löschen Sie in Ubuntu rekursiv ein bestimmtes Zeichen/bestimmte Zeichen aus Dateien

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:

  1. Kann ich mehrere Zeichen angeben, die im Befehl abgeglichen werden sollen, um sie in z zu ändern?
  2. 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.

verwandte Informationen