[리눅스] 파일 입출력 관련 명령어 1 (cut, paste, diff, sort, sed)

728x90
728x90

이번에는 파일 입출력과 관련된 명령어 cut, paste, sort, diff, sed를 각각 예제를 통해 알아보겠다.

 

cut 명령어

텍스트 파일에서 특정 부분을 잘라내어 출력할 때 사용된다.


구분자(delimiter)를 기준으로 데이터를 분리하여 원하는 열(column)을 추출하는 데 유용하다.

 

cut [옵션] [파일 이름]

 

 

예제에서 사용될 data 파일의 내용은 다음과 같다.

 

etc-image-0
data 파일 내용

 

 

아래는 cut 명령어에서 사용할 수 있는 옵션들이다.

 

-c, --characters 옵션

문자 단위로 잘라낸다.

 

특정 위치의 문자를 기준으로 잘라낼 수 있다.

 

etc-image-1
cut 명령어 c옵션

 

위는 data 파일에서 2번째 문자부터 5번째 문자까지만 출력하는 명령이다.

 

 

-d, --delimiter 옵션

필드 구분자를 지정한다.

 

기본적으로 cut은 탭(\t)을 구분자로 사용하지만, -d 옵션을 사용하여 다른 구분자를 설정할 수 있다.

 

그리고 -f 옵션(--fields 옵션)을 사용해 출력할 필드를 지정할 수 있다.

 

etc-image-2
cut 명령어 d옵션

 

위는 data 파일에서 " "를 구분자로 사용해 각각의 필드로 나누고 1번째 필드와 4번째 필드만 출력하는 명령이다.

 

파이프라인을 사용해 다음과 같이 활용할 수도 있다.

 

위의 결과를 아래에서 4개 행만 출력할 수 있다.

 

etc-image-3
cut 명령어 활용

 

paste 명령어

파일을 수평으로 결합하여 출력하는 데 사용된다.

 

즉, 여러 파일의 각 줄을 가로로 붙여서 출력할 때 사용하는 명령어다.

 

기본적으로 paste는 파일들의 각 줄을 구분자 없이 결합하지만, 구분자를 지정할 수도 있다.

 

paste [옵션] [파일1] [파일2] ...

 

 

예제에서 사용될 file1과 file2의 내용은 다음과 같다.

 

etc-image-4
file1과 file2의 내용

 

 

paste 명령어를 활용해 file1과 file2의 내용을 수평으로 붙여보면 다음과 같다.

 

etc-image-5
paste 명령어 활용 예시

 

파일을 지정하지 않으면 paste는 표준 입력을 읽어와서 결합한다.

 

예를 들어, paste 명령어를 여러 번 실행하여 여러 줄을 입력하고 결합할 수 있다.

 

-d, --delimiters 옵션

d옵션을 사용하면 구분자를 지정할 수 있다.

 

기본적으로 탭(\t)이 구분자로 사용되지만, d옵션을 사용하여 다른 구분자로 변경할 수 있다.

 

etc-image-6
paste 명령어 d옵션

 

 

위는 paste 명령어로 file1과 file2를 수평으로 결합하는데, :를 이용해 구분자를 두는 명령이다.

 

-s, --serial 옵션

각 파일의 내용을 세로로 결합하는 대신 각 파일의 모든 줄을 순차적으로 하나의 줄로 합친 후 출력한다.

즉, 수평이 아닌 수직으로 결합하는 옵션이다.

 

etc-image-7
paste 명령어 s옵션

 

 

위처럼 file1과 file2의 내용이 각각 한 줄로 나타나고, 수직으로 결합된다.

 

etc-image-8
paste 명령어 활용 예시

 

d 옵션과 함께 사용하면 구분자를 이용해 구분하여 출력할 수 있다.

 

이를 통해 각 파일의 내용을 하나의 줄로 결합할 수 있다.

 

diff 명령어

두 파일이나 디렉토리 간의 차이점을 비교하고, 다른 부분을 출력하는 데 사용된다.

 

주로 텍스트 파일의 차이를 확인하거나, 코드 변경 사항을 추적할 수 있다.

 

diff [옵션] [파일1] [파일2]

 

 

-u, --unified 옵션

u옵션은 통합 형식으로 차이점을 출력해서 변경된 부분을 보다 직관적으로 볼 수 있게 해준다.

 

주로 패치 파일을 생성할 때 많이 사용된다.

 

-c, --context 옵션

문맥 형식으로 차이점을 출력한다.

 

-u와 비슷하지만, 변경된 줄을 포함하여 더 많은 컨텍스트 정보를 제공한다.

 

diff 명령어 사용 예시

$ cat file1.txt
apple
banana
cherry
$ cat file2.txt
apple
banana
orange
$ diff file1.txt file2.txt
3c3
< cherry
---
> orange

 

여기서 출력된 3c3는 file1.txt와 file2.txt의 세 번째 줄에 차이가 있다는 것을 의미한다.

 

sort 명령어

파일의 내용을 정렬하는 데 사용된다.

 

기본적으로 sort는 각 줄을 오름차순으로 정렬한다.

 

sort [옵션] [파일 이름]

 

sort 예제에서 사용될 data 파일의 내용은 다음과 같다.

 

etc-image-9
data 파일 내용

 

sort를 사용하면 위의 파일의 내용을 알파벳 순으로 정렬해준다.

 

etc-image-10
sort 명령어 활용 예시

 

-r, --reverse 옵션

내림차순으로 정렬할 때 사용한다.

 

etc-image-11
sort 명령어 r옵션

 

-k, --key 옵션

특정 키를 기준으로 정렬한다.

 

-k 옵션을 사용하면 특정 열(컬럼)을 기준으로 정렬할 수 있다.

아래는 -k 옵션을 이용해 3번째 컬럼을 기준으로 정렬한 것이다.

 

etc-image-12
sort 명령어 k옵션

 

-t, --field-separator 옵션

구분자를 사용해 파일 내 필드를 구분할 수 있다.

 

아래는 /etc/passwd 파일의 아래에서 5개의 줄을 출력한 것이다.

 

etc-image-13
/etc/passwd 파일 일부

 

sort 명령어의 -t 옵션을 활용하여 /etc/passwd 파일에서 ":"로 필드를 구분하고 세 번째 필드(UID)를 기준으로 정렬하면 다음과 같다.

 

etc-image-14
sort 명령어 활용 예시

 

-n, --numeric-sort 옵션

위 스크린 샷에서 맨 마지막에 정렬된 수는 99고, 그 전 수는 999인 것을 미루어 보아

 

위의 정렬은 실제 수가 아닌 숫자를 문자로 인식해 정렬한 것임을 알 수 있다.

 

이때 -n 옵션을 이용하면 실제 수로 인식해 정렬할 수 있다.

 

etc-image-15
sort 명령어 활용 예시 -n 옵션

 

sed 명령어

sed는 Stream Editior의 약자로서 파일을 처리하고 수정하는데 사용되는 강력한 스트림 편집기다.


주로 텍스트의 패턴을 찾아서 변경하거나 삭제하는 작업에 사용된다.

 

sed [옵션] '명령' [파일 이름]

 

치환

(1)
sed 's/A/B/g' [파일 이름]
(2)
sed 's/A/B' [파일 이름]
(3)
sed '숫자s/A/B/' [파일 이름]
(4)
sed -n 's/A/B/gp' [파일 이름]

 

(1)

파일 내 단어 A를 B로 모두 치환한다.

 

(2)

여기서 g를 빼면 각 줄에서 첫 번째로 나오는 A만 B로 치환한다.

 

(3)

s 앞에 숫자 x를 넣으면 x번째 줄의 A를 B로 치환한다.

 

즉 행 번호를 지정해 수정하는 것이다.

 

(4)

-n 옵션을 주고 끝에 p를 넣으면 치환하는 단어가 있는 줄만 출력한다.

 

etc-image-16
data 파일 내용

 

위의 data 파일을 이용해 실습을 해보자.

 

019를 999로 바꿔보자.

 

etc-image-17
sed 명령어 활용 예시

 

019가 999로 바뀌어 출력된 것을 볼 수 있다.

 

파일 자체는 수정되지 않은 것 또한 알 수 있다.

 

이때 -i 옵션을 넣으면 파일 자체를 수정할 수 있다.

 

etc-image-18
sed 명령어 활용 예시

 

위를 통해 -i 옵션을 넣으면 파일 자체의 내용이 바뀌는 것을 알 수 있다.

 

 

아래처럼 -n 옵션과 p를 붙이면 내용이 바뀌는 줄만 출력할 수 있다.

 

아래는 data 파일에서 5번째 줄 이후부터 나오는 모든 019를 999로 바꿔 출력하는 것이다.

 

etc-image-19
sed 명령어 활용 예시

 

특정 패턴이 있는 줄 출력

sed '/pattern/p' [파일 이름]
sed -n '/pattern/p' [파일 이름]

 

 

pattern이 있는 줄을 출력한다.

 

-n 옵션을 넣지 않으면 모든 파일의 내용을 출력하면서 pattern이 있는 줄을 두 줄씩 출력하고 

 

-n 옵션을 넣으면 해당 패턴이 있는 줄만 출력한다.

 

etc-image-20
sed 명령어 활용 예시

 

줄 삭제

sed '숫자d' [파일 이름]

 

지정한 줄을 삭제한다.

 

아래는 data 파일에서 2번째 줄부터 4번째 줄까지 삭제한 것이다.

 

etc-image-21

 

여러 명령을 한 번에 실행

-e 옵션을 주면 여러 명령을 한 번에 실행할 수 있다.

sed -e '명령' -e '명령' [파일 이름]

 

 

아래는 파일 내 019를 999로 모두 바꾸는 's/019/999/g' 명령과 6번째 줄 이후부터는 삭제하는 '6,$d' 명령을 한 번에 실행하는 것이다.

 

etc-image-22
sed 명령어 활용 예시

 

반응형