
다음을 입력하면
echo "This is for testing" | tr -s [:space:]
나는 이것을 이해한다 ...
This is for testing
여러 공백을 제거하고 단어 사이에 공백 하나만 넣기를 바랐습니다. 내가 뭘 잘못하고 있는지 알 수 없습니다.
답변1
에서 tr -s [:space:]
인용되지 않은 항목은 [:space:]
쉘에 의해 glob으로 처리되며, 해당 glob(단일 문자로 된 파일 이름 :
, a
, c
, , e
, p
, s
)과 일치하는 파일이 있으면 쉘(예: 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
(쉘 옵션에 따라 다른 작업을 수행할 수도 있습니다.)
따라서 쉘이 해석하지 않도록 인용을 사용하십시오 [: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:]