tr -c '[a-zA-Z]' '\n' 모든 보완 문자를 바꾸지 않음

tr -c '[a-zA-Z]' '\n' 모든 보완 문자를 바꾸지 않음

스크립트를 작성하면서 알파([a-zA-Z])를 제외한 모든 문자를 줄 바꿈으로 바꾸고 싶었습니다. 정의에 따라 -c 플래그(세트 보완)를 사용할 때 tr은 SET1에 없는 모든 문자를 SET2에 지정된 문자로 대체해야 합니다. 그럼에도 불구하고 예상대로 작동하지 않습니다. 다음을 시도해 보세요.

echo '[[:lower:]]' | tr -c '[a-zA-Z]' '\n'

내가 얻는 결과 :

[[
lower
]]

보시다시피 이는 열을 대체하지만 대체해야 하는 대괄호는 대체하지 않습니다.

누구든지 이것을 명확히 할 수 있습니까?

답변1

tr해당 정규식 스타일의 문자 클래스를 해석하지 않습니다.

[a-zA-Z]는 에서 까지 [의 문자 범위인 의 집합으로 해석됩니다 .az]

따라서 그 보수는 모든 문자를 포함하는 문자 집합이지만 에서 ~ 및 까지 [의 문자 범위를 포함합니다 .az]

그렇기 때문에 [교체 ]되지 않습니다.

알파벳이 아닌 문자를 바꾸려면 a-zA-Z바꿀 집합의 보수로 지정하면 됩니다.

echo '[[:lower:]]' | tr -c 'a-zA-Z' '\n'
% echo '[[:lower:]]' | tr -c 'a-zA-Z' '\n'



lower



%

관련 정보