为什么我不能使用 tr -s 删除空格

为什么我不能使用 tr -s 删除空格

当我输入以下内容时

echo "This   is   for    testing" | tr -s [:space:]

我明白了...

This   is   for    testing

我希望删除多个空格,让单词之间只留一个空格。我不知道我做错了什么。

答案1

在 中tr -s [:space:],未加引号的部分[:space:]将被 shell 视为一个 glob,如果您有一个与该 glob 匹配的文件(文件名中包含:acep、中的任意一个字符s),那么您的 shell(可能是 bash)会将该 glob 扩展为该文件名:

bash-5.1$ echo tr -s [:space:]
tr -s [:space:]
bash-5.1$ touch c
bash-5.1$ echo tr -s [:space:]
tr -s c

(它还可能根据 shell 选项执行其他操作。)

因此,使用引号以便 shell 不会解释[:space:]

echo "This   is   for    testing" | tr -s '[:space:]'

答案2

它对我来说可以压缩空格,但对你来说可能不行,因为你的示例文本中的那些空格并不是真正的空格,

它们可能是标签

尝试这个

echo "This   is   for   testing" | tr \\t " "

或者,如果有多个标签,你可以尝试使用

echo "This  is   for   testing" | tr \\t " " | tr -s [:space:]

相关内容