tr을 사용하여 중복된 문자를 문자로 바꿀 수 있습니까?

tr을 사용하여 중복된 문자를 문자로 바꿀 수 있습니까?

#의 모든 항목을 가져오고 연속된 경우 하나만 #으로 바꾸려고 합니다.

예를 들어

 ab ### cde fghi## jklm

될 것입니다:

ab # cde, fghi# jklm

나의 초기 목표는 모든 연속 숫자를 # 120 -> # 및 3->#으로 바꾸는 것이었습니다. 그러나 나는 120->###을 찾았습니다. 이제 저는 이 새로운 문제에 직면하게 되었습니다.

답변1

사용 tr -s:

$ echo 'ab ### cde fghi## jklm' | tr -s '#'
ab # cde fghi# jklm

-s 입력의 마지막 피연산자(string1 또는 string2)에 나열된 여러 문자를 해당 문자의 단일 인스턴스로 압축합니다. 이는 모든 삭제 및 번역이 완료된 후에 발생합니다.


원래 문제는 다음을 통해 해결될 수 있습니다.

sed -E 's/[0-9]+/#/g'

또는 POSIX적으로:

sed 's/[[:digit:]]\{1,\}/#/g'

또는:

tr -s '[:digit:]' '[#*]'

관련 정보