줄이 있는 경우:
Thhiisss iisss mmyyy nameeee
다음과 같이 인쇄하고 싶습니다.
This is my name
유닉스 명령이란 무엇입니까?
답변1
그리고 tr
:
echo "Thhiisss iisss mmyyy nameeee" | tr -s 'a-z'
설명: 반복되는 문자를 "압착"하는 스위치입니다 -s
. tr
표시된 대로 이 스위치는 일련의 문자( a
to ) 와 함께 사용할 수 있습니다 z
.
답변2
한 가지 방법은 다음과 같습니다 sed
.
sed ':X;s/\(.\)\1/\1/g;tX'
훨씬 더 간단합니다:
sed 's/\(.\)\1*/\1/g'
(감사해요코스타스그리고맥사이프의견을 위해).
답변3
sed
GNU 시스템에서 로케일이 멀티바이트 문자를 사용하는 경우 또는 이와 유사한 명령을 사용해야 합니다.(지미가 제안한대로)GNU는 tr
바이트당 하나의 문자만 참조할 수 있기 때문입니다. ASCII 로케일에서는 다음을 제거할 수 있습니다.모두예를 들면 다음과 같습니다 tr
.
LC_ALL=C tr -s '\0-\255' <input
그래서...
echo Thhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\0-\255'
...인쇄...
This is my name
범위별로 대상을 참조하여 선택적으로 이 작업을 수행할 수도 있습니다.
echo TThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\101-\132'
...또는...
echo TTTThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '[:upper:]'
...결과는 동일하며 둘 다 인쇄됩니다.
Thhiisss iisss mmyyy nameeee
...또는 [:punct:]
, [:digit:]
또는 원하는 것을 [:lower:]
사용 하세요. [:alpha:]
다음을 사용하여 선택을 무효화할 수도 있습니다 -c
.
echo 'TTTThhiisss iisss mmyyy nameeee' |
LC_ALL=C tr -cs '[:upper:]'
...인쇄...
TTTThis is my name
답변4
echo "Thhiisss iisss mmyyy nameeee" | grep -o . | uniq | tr -d '\n'