為什麼我不能使用 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:]

相關內容