`tr` は予想以上に多くのものを置き換えます

`tr` は予想以上に多くのものを置き換えます

教師としての仕事で、OneDrive に定期的にバックアップしたいファイルが山ほどあります。同僚はファイルに名前を付けるのが苦手なので、OneDrive にファイルを保存できるようにクリーンアップする必要があります。

理解できないのは、ピリオドの前のスペースを選択する方法です。

これを試しています

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

そしてこれを手に入れる

foo.bar.pdfの代わりにfoo bar.pdf。私のコマンドの何が間違っているのでしょうか?

答え1

tr置き換えるシングル文字を単一の文字に置き換え、各スペースと各ドットをドットに置き換えるように指示しました (ただし、-sスペースとドットを 1 つのエンティティに圧縮して置き換えます)。つまり、1 つのスペースまたはドットで . をトリガーするのに十分ですtr

文字列を置換するには以下を使用しますsed:

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

注:グローバルに act を使用したgためtr、これが一般的に必要なものであると判断しました (この特定の文字列では関係ありませんfoo bar .pdf)。

関連情報