
когда я ввожу следующее
echo "This is for testing" | tr -s [:space:]
Я понял...
This is for testing
Я надеялся убрать несколько пробелов и оставить только один пробел между словами. Я не вижу, что я делаю неправильно.
решение1
В tr -s [:space:]
, то, что не заключено в кавычки, [:space:]
будет рассматриваться оболочкой как глоб, и если у вас есть файл, который соответствует этому глоб (имя файла с одним символом из :
, a
, c
, e
, p
, s
), то ваша оболочка (вероятно, bash) расширит этот глоб до этого имени файла:
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
(Он также может выполнять другие действия в зависимости от параметров оболочки.)
Поэтому используйте кавычки, чтобы оболочка не интерпретировала [: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:]