#의 모든 항목을 가져오고 연속된 경우 하나만 #으로 바꾸려고 합니다.
예를 들어
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:]' '[#*]'