`tr` 替换的内容超出了我的预期

`tr` 替换的内容超出了我的预期

我有很多教学工作的文件,我想定期备份到 OneDrive 中。我的同事不擅长命名文件,所以他们需要清理一下,以便 OneDrive 能够接收这些文件。

我无法理解的是如何选择句号前的空格。

我正在尝试

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

并得到这个

foo.bar.pdf而不是foo bar.pdf。我的命令有什么问题?

答案1

tr取代单身的字符替换为单个字符,并告诉它用点替换每个空格和每个点(除了-s将空格+点压缩为单个实体进行替换)。换句话说,一个空格或点就足以触发你的tr

要替换字符串,请使用sed

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

注意:我使用是g因为tr您在全球范围内使用了行为,所以我假设这是您通常想要的(对于这个特定的字符串来说这并不重要foo bar .pdf)。

相关内容