Linux command - tr

sycho·2024년 1월 3일
0

Linux Commands

목록 보기
28/30

tr

  • documentation

  • translate의 약자.

  • 표준 입력에 들어온 문자열을 변조시키는데 사용되는 명령어.

  • 변조된 결과물은 표준 출력에 출력한다.

basics

tr [OPTION]... SET1 [SET2]
  • OPTION : tr 동작 설정

  • SET1 : 변조될 조건의 문자들을 나타내는 곳

  • SET2 : 변조 대상인 문자들을 무슨 문자로 변조할지 나타내는 곳

  • 기본 동작은 밑과 같다.

sycho@DESKTOP-4RPUOID:~$ echo "Linus developed both Linux and Git. How amazing!" | tr "o" "a"
Linus develaped bath Linux and Git. Haw amazing!
  • 여러개의 문자를 동시에 변조시키는 것도 가능하다. SET1"abcd", SET2"ABCD"로 하면 aA, bB,...의 형식으로 변조된다.
sycho@DESKTOP-4RPUOID:~$ echo "Linus developed both Linux and Git. How amazing!" | tr "abcd" "ABCD"
Linus DevelopeD Both Linux AnD Git. How AmAzing!

OPTIONS

SET1에 없는 문자열들을 바꾸기. (-c)

  • complement의 약자.

  • SET1에 없는 문자열을, SET2의 마지막 문자로 다 바꾼다.

  • \n같은 특이 문자들도 전부 포함.

sycho@DESKTOP-4RPUOID:~$ echo "Linus developed both Linux and Git. How amazing!" | tr -c "a-d" "A-D"
DDDDDDdDDDDDDDdDbDDDDDDDDDDaDdDDDDDDDDDDaDaDDDDDDsycho@DESKTOP-4RPUOID:~$

SET1에 있는 문자들을 지우기 (-d)

  • delete의 약자

  • SET1의 문자들을 전부 제거한다.

  • SET2가 필요가 없는 option.

sycho@DESKTOP-4RPUOID:~$ echo "Linus developed both Linux and Git. How amazing!" | tr -d "a-d"
Linus evelope oth Linux n Git. How mzing!

중복 뭉치기 (-s)

  • squeeze-repeats의 약자.

  • SET1에 있는 문자들 중 하나가 연속으로 나올 경우 이를 하나로 뭉치는 option

  • SET2를 넣는것도 간으한데, 이 경우 하나로 뭉쳐진 문자가 SET2의 문자로 대체된다.

sycho@DESKTOP-4RPUOID:~$ echo "Hello~~~~~~~~~~~~~~!" | tr -s "~" "-"
Hello-!

SET1SET2크기로 일단 조절 (-t)

  • truncate-set1의 약자다.

  • SET1이 크기가 SET2보다 큰 경우 일단 SET2만큼의 크기로 맞추고 변조를 한다.

  • 밑의 경우 -t option을 사용시 ub를 먼저 s 크기에 맞게 u로 바꾸고, 그 다음에 그것들을 전부 s로 바꾼다.

  • 없는 경우에 ub에 해당하는걸 전부 s로 바꾼것과 차이를 보인다.

sycho@DESKTOP-4RPUOID:~$ echo "Linux? Ubuntu? I don't know which to learn..." | tr "ub" "s"
Linsx? Ussnts? I don't know which to learn...
sycho@DESKTOP-4RPUOID:~$ echo "Linux? Ubuntu? I don't know which to learn..." | tr -t "ub" "s"
Linsx? Ubsnts? I don't know which to learn...

응용

SET 범위 형태로 나타내기.

  • SET의 경우 -을 사용해서 오름차순 형태로 문자 범위를 나타내는 것도 가능하다.
sycho@DESKTOP-4RPUOID:~$ echo "Linus developed both Linux and Git. How amazing!" | tr "a-d" "A-D"
Linus DevelopeD Both Linux AnD Git. How AmAzing!

여러 공백 제거

sycho@DESKTOP-4RPUOID:~$ echo "He      llo" | tr -s " "
He llo

숫자들 전부 제거

  • documentation을 보면 SET 지정시 특별하게 지정이 가능한 집합들이 몇개 있다. 대괄호를 보통 사용하는데, 숫자들의 경우 [:digit:]을 사용하면 된다.
sycho@DESKTOP-4RPUOID:~$ echo "1234567 countdown to 7654321" | tr -d [:digit:]
 countdown to

소문자/대문자를 대문자/소문자로 바꾸기

  • 이것도 특별하게 지정하는 SET를 활용
sycho@DESKTOP-4RPUOID:~$ echo "hello everyone!" | tr [:lower:] [:upper:]
HELLO EVERYONE!

영문자 및 숫자가 아닌 문자들 전부 제거

  • 제거되는 문자에 공백도 포함한다는 점 유의
sycho@DESKTOP-4RPUOID:~$ echo "h#e#llo#ev##ery#@&*(one" | tr -cd [:alnum:]
helloeveryonesycho@DESKTOP-4RPUOID:~$

숫자만 남기고 제거

sycho@DESKTOP-4RPUOID:~$ echo "phone number : 01012345678" | tr -cd [:digit:]
01012345678sycho@DESKTOP-4RPUOID:~$

줄바꿈 제거하고 전부 공백 기준으로 이어붙이기

sycho@DESKTOP-4RPUOID:~$ echo -e "I\nLove\nLinux" | tr "\n" " "
I Love Linux sycho@DESKTOP-4RPUOID:~$

각 줄마다 단어 하나씩 배치하기

sycho@DESKTOP-4RPUOID:~$ echo "I Love Linux" | tr [:space:] "\n"
I
Love
Linux
profile
CS 학부생, 핵심 관심 분야 : Embed/System/Architecture/SWE

0개의 댓글