`tr` ersetzt mehr als ich erwartet habe

`tr` ersetzt mehr als ich erwartet habe

Ich habe jede Menge Dateien aus meiner Lehrtätigkeit, die ich regelmäßig in OneDrive sichern möchte. Meine Kollegen sind schlecht darin, Dateien zu benennen, also müssen sie sie aufräumen, damit OneDrive sie übernehmen kann.

Ich verstehe nicht, wie ich ein Leerzeichen vor einem Punkt auswähle.

Ich versuche dies

bash-3.2$ echo "foo bar .pdf" | tr -s " \." '\.'

und das bekommen

foo.bar.pdfstatt foo bar.pdf. Was ist falsch an meinem Befehl?

Antwort1

trersetzteinzelZeichen durch einzelne Zeichen und Sie haben ihm gesagt, dass jedes Leerzeichen und jeder Punkt durch einen Punkt ersetzt werden soll (außer, dass -sLeerzeichen+Punkt zu einer einzigen zu ersetzenden Einheit zusammengedrückt werden). Mit anderen Worten, ein Leerzeichen oder ein Punkt reicht aus, um Ihr auszulösen tr.

Um Zeichenfolgen zu ersetzen, verwenden Sie sed:

echo "foo bar .pdf" | sed 's/ \././g'

Hinweis: Ich habe „acts“ verwendet g, weil trSie „acts“ global verwendet haben und daher davon ausgegangen bin, dass Sie dies im Allgemeinen möchten (für diese bestimmte Zeichenfolge spielt es keine Rolle foo bar .pdf).

verwandte Informationen