본문 바로가기
카테고리 없음

[Linux] 역, 작은, 큰 따옴표, cut, sort, uniq, wc ⑤

by 떵해이 2020. 12. 11.
300x250

 

○ 따옴표

쉘 스크립트 사용에서는 인용 부호가 3종류가 있습니다.

3종류의 각각 인용 부호에 대한 정의를 분명하게 해야합니다.

부호마다 결과가 다르기 때문에 자세히 알고 넘어가도록 하겠습니다.

 

예시를 보는 것이 효과적이기 때문에 간단하게 다 예시로 보여드리겠습니다.

 

● 큰 따옴표

   ▷ 몇몇을 제외한 문자외에는 문자열 그대로 출력

   ▷ 변수가 가진 값을 출력 ($사용)

    $(달러 기호), `(역 따옴표), \(백 슬래시)

       큰 따옴표는 이 3문자 외에 대부분의 문자를 무시

 

예시

# echo "$HOME"

>> /root (사용자 계정 홈 디렉토리 출력)

 

● 작은 따옴표

   ▷ 문자열 그대로 출력

   ▷ 작은 따옴표는 모든 문자를 무시

 

예시

# echo '$HOME'

>> $HOME (문자 그대로 출력)

 

● 역 따옴표

   ▷ 명령어를 실행한 결과를 출력

   ▷ 보통 어떤 명령어 결과값을 담거나 출력할 때 사용

 

예시

# echo `pwd`

>> /root (현재 위치 출력)

 

 

● 따옴표 사용 예시

 

▷ 큰 따옴표 출력하는 방법 (예시일 뿐 응용할 수 있는 건 많습니다.)

# echo "\"" \(백 슬래시)를 이용하여 문자 그대로를 유지시켜줘서 "를 출력

# echo \" \를 이용하여 문자 출력

# echo '"' 작은 따옴표를 이용하여 문자열 그대로 출력

 

▷ 작은 따옴표 출력하는 방법

# echo "'" 큰 따옴표를 이용하여 문자열 출력

# echo \'

 

▷ 역 따옴표는 작은 따옴표안에 넣으면 실행이 되지 않습니다.

# echo 'abcd `pwd`' 모두 문자열로 인식

결과는 abcd `pwd`로 출력됩니다.

 

▷ 역 따옴표는 큰 따옴표안이나 그냥 사용해야 인식합니다.

# echo "abcd `pwd`"

# echo abcd `pwd`

결과는 동일하게 abcd /root로 출력됩니다.

 

작은 따옴표와 큰 따옴표는 변수를 치환할 필요가 있는지 고려하여 사용하면 됩니다.

 

이 정도 완벽히 다룰 줄 알면 응용해서 나중에 편하게 다루실 수 있습니다.

 

cut

    ▷ 문자열을 자를 때 주로 사용하는 명령어

 

사용법

# cut [옵션] [파일명]

 

자주 사용하는 옵션

-d, -f를 자주 사용하고, -d는 구문자이고, 옵션은 상황에 따라 b,c,f중 택 1하시면 됩니다.

옵   션 의   미
-d (delimiter) 필드 구분자를 지정 (미설정시 기본 필드 구분인 tab)
-f (fields) 파일 필드 기준으로 추출, 구간 설정
-c (character) 문자수를 기준으로 추출
-b (byte) 바이트를 기준으로 추출 (대부분 네트워크에서 데이터 들어올 때 사용)

 

예시

일단 아주 간단한 예시로 감을 가져보도록 하겠습니다.

파이프(|)는 앞에 명령 결과에 또 다른 명령을 씌우는 것입니다.

다음 글에 자세하게 다중 명령어를 참조하시면 됩니다.

 

# echo "a,B,c,d,E,f" | cut -d "," -f 2,5

출력 결과는 B,E 로 나옵니다.

 

# echo "a,B,c,d,E,f" | cut -d ',' -f 2-5

출력 결과는 B,c,d,E 로 나옵니다.

 

# echo "a,B,c,d,E,f" | cut -d , -f 2-

출력 결과는 B,c,d,E,f 로 나옵니다.

 

예시 3개만 봐도 감이 올 것입니다.

구분자도 큰 따옴표안에 넣어도 되고, 작은 따옴표안에 넣어도 되고, 안써도 됩니다.

 

첫 문자만 잘라보기

# echo pfighting | cut -c 2-

출력 결과는 fighting로 나옵니다.

 

마지막 문자만 잘라보기

# echo fightingg | rev | cut -c 2- | rev

rev는 reverse의 약자로 한 행의 내용을 거꾸로 출력하는 명령입니다. (cat명령의 반대라고 생각하시면 됩니다.)

출력 결과는 fighting로 나옵니다.

 

이제는 조금 실용적인 예시를 써보겠습니다.

# cat /etc/passwd에서 한번 해보겠습니다.

 

 

# cut -d : -f 1 /etc/passwd

구분자는 : 로 하고 나누는 기준에서 첫번째 열에 있는 사용자 계정명들을 쫙 볼 수 있습니다.

이런식으로 cut명령어를 사용합니다.

 

○ sort

    ▷ 텍스트 파일의 행단위를 정렬할 때 사용하는 명령어

     숫자, 알파벳 순으로 정렬해주는 명령어

 

사용법

# sort [옵션] [파일명]

 

자주 사용하는 옵션

옵   션 의   미
-r 내림차순 정렬 (기본은 오름차순)
-t 구분자 지정
-k 정렬할 열 지정
-n 숫자를 기준
-u 중복 라인 제거

 

예시

 

# cat a 파일이 있다고 가정해봅시다.

 

이름, 지역, 직업, 월급

철수, 부산, 사업가, 800

영희, 서울, 디자이너, 300

지은, 경기, 연예인, 600

 

 

# tail -3 | sort -t , -k 4 -r a

a라는 파일을 뒤에서 3줄 출력, t옵션으로 구분자를 ','정하고,

k옵션으로 정렬할 열을 4번째 열인 월급으로 정하고,

r옵션으로 내림차순 정렬합니다.

 

월급이 높은 순으로 정렬하기 위한 설정입니다.

이런식으로 정렬할 때 사용합니다.

 

uniq

    ▷ 중복을 제거하는 명령어

        (중복된 내용의 행이 연속으로 있으면 하나만 남기고 삭제)

     전체적으로 분산된 중복은 찾아낼 수 없기 때문에 순차적으로 만든 뒤에 적용해야 함

        (sort와 같이 쓰기 좋습니다.)

 

사용법

# uniq [옵션] [파일명]

 

보통 sort로 정렬하고 난 뒤 # uniq 명령을 입력하면 중복된 것을 제거해줍니다.

 

자주 사용하는 옵션

옵   션 의   미
-c 몇 번 중첩되었는지 알려주는 옵션
-d 중복 라인만 출력하는 옵션
-u 중복되지 않는 라인만 출력하는 옵션

 

wc

    ▷ 해당 파일의 단어의 수를 세어주는 명령어

     내용의 줄, 단어, 문자 수를 출력할 수 도 있습니다.

 

사용법

# wc [옵션] [파일명]

 

자주 사용하는 옵션

옵   션 의   미
-w 단어 수만 출력
-l 라인 수만 출력
-c 문자 수만 출력

 

예시

# wc /etc/passwd

21행 29단어 총 문자수 928(개행문자까지 포함) 이라는 뜻입니다.

 

# cat test | grep "root" | wc -l

test 파일에서 root포함된 줄 수 출력

 

쉘 스크립트에서 사용 방법은 엄청 많습니다.

반응형

댓글