
當我輸入以下內容時
echo "This is for testing" | tr -s [:space:]
我明白了...
This is for testing
我希望刪除多個空格,只在單字之間留一個空格。我不明白我做錯了什麼。
答案1
在 中tr -s [:space:]
,未加引號的內容[:space:]
將被 shell 視為一個 glob,如果您的檔案與該 glob 相符(具有:
、a
、c
、e
、p
、中任何一個字元的檔案名稱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:]