`tr` substitui mais do que eu esperava

`tr` substitui mais do que eu esperava

Tenho muitos arquivos do meu trabalho como professor que desejo colocar no OneDrive em um backup regular. Meus colegas são ruins em nomear arquivos, então eles precisam de uma limpeza para que o OneDrive possa pegá-los.

A parte que não consigo entender é como selecionar um espaço antes de um ponto final.

Estou tentando isso

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

e conseguindo isso

foo.bar.pdfem vez de foo bar.pdf. O que há de errado com meu comando?

Responder1

trsubstituisolteirocaracteres com caracteres únicos e você disse para substituir cada espaço e cada ponto por ponto (exceto -sapertar espaço + ponto em uma única entidade para substituir). Em outras palavras, um espaço ou ponto é suficiente para acionar seu arquivo tr.

Para substituir strings use sed:

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

Nota: usei gporque trvocê usou atos globalmente, então presumi que isso é o que você deseja em geral (não importa para esta string específica foo bar .pdf).

informação relacionada