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

728x90
728x90

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

 

cut 명령어

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


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

 

cut [옵션] [파일 이름]

 

 

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

 

data 파일 내용

 

 

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

 

-c, --characters 옵션

문자 단위로 잘라낸다.

 

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

 

cut 명령어 c옵션

 

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

 

 

-d, --delimiter 옵션

필드 구분자를 지정한다.

 

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

 

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

 

cut 명령어 d옵션

 

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

 

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

 

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

 

cut 명령어 활용

 

paste 명령어

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

 

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

 

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

 

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

 

 

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

 

file1과 file2의 내용

 

 

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

 

paste 명령어 활용 예시

 

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

 

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

 

-d, --delimiters 옵션

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

 

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

 

paste 명령어 d옵션

 

 

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

 

-s, --serial 옵션

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

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

 

paste 명령어 s옵션

 

 

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

 

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 파일의 내용은 다음과 같다.

 

data 파일 내용

 

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

 

sort 명령어 활용 예시

 

-r, --reverse 옵션

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

 

sort 명령어 r옵션

 

-k, --key 옵션

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

 

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

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

 

sort 명령어 k옵션

 

-t, --field-separator 옵션

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

 

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

 

/etc/passwd 파일 일부

 

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

 

sort 명령어 활용 예시

 

-n, --numeric-sort 옵션

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

 

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

 

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

 

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를 넣으면 치환하는 단어가 있는 줄만 출력한다.

 

data 파일 내용

 

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

 

019를 999로 바꿔보자.

 

sed 명령어 활용 예시

 

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

 

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

 

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

 

sed 명령어 활용 예시

 

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

 

 

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

 

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

 

sed 명령어 활용 예시

 

특정 패턴이 있는 줄 출력

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

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

 

 

pattern이 있는 줄을 출력한다.

 

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

 

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

 

sed 명령어 활용 예시

 

줄 삭제

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

 

지정한 줄을 삭제한다.

 

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

 

 

여러 명령을 한 번에 실행

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

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

 

 

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

 

sed 명령어 활용 예시

 

반응형