[리눅스] 12장 텍스트 처리

aramjs·2023년 12월 11일

Linux

목록 보기
9/14
post-thumbnail

12.1 wc : 바이트 수, 단어 수, 행 수 세기

  • wc /etc/passwd
    21 31 973 /etc/passwd : 행 수 단어 수 바이트 수 파일 이름

  • 옵션을 지정하지 않은 경우에는 행, 단어, 바이트 수를 차례로 출력한다.

  • wc -l /etc/passwd : 행 수
    47 /etc/passwd

  • wc -w /etc/passwd : 단어 수
    82 /etc/passwd

  • wc -c /etc/passwd : 바이트 수
    2778 /etc/passwd

  • ls-l / | wc -l : ls -l/ 로 출력되는 행 수를 세면 루트 디렉터리에 파일과 디렉터리가 몇 개 있는지 알 수 있다.

  • 필터 명령어는 파일을 지정하지 않으면 표준 입력을 읽는다.

    • ls / | wc -l - : - 를 붙어 필터 사용 시 표준 입력을 사용하게 한다.
  • ls/ | wc -l - : 마지막 - 는 표준 입력을 받았다는 표시이다.


12.2 sort : 행 단위로 정렬하기

  • 행 단위로 정렬한다.

  • 옵션을 지정하지 않으면 알파벳 순으로 정렬한다.

  • sort file1 : 파일 내용을 정렬해서 보여준다.

  • sort file1 > sorted1 : sort로 출력한 결과를 sorted1에 리다이렉션 한다.

  • 한 행을 필드라고 한다.

  • ps x | sort -k 5 : 특정 필드를 기준으로 정렬하려면 -k 옵션을 사용한다.

  • 커맨드 필드는 5번째 필드이므로 -k 5로 지정하면 된다.

  • 아스키 코드로 정렬하므로 대문자가 다 나오고 난 후 소문자가 나온다.

  • 알파벳보다 슬래시가 먼저 나온다.

  • sort -n : 숫자 값으로 정렬
    그냥 sort로 하면 문자열로 인식하기 때문에 숫자상으로 정렬이 되지 않는다.

  • sort -r : 역순으로 정렬
    기본으로 알파벳 오름차순으로 정렬하므로, 역순일 때는 알파벳 내림차순이다.

  • sort -nr : 숫자 값이 큰 순서대로 정렬


12.3 uniq : 중복 제거하기

  • 연속되지 않은 중복은 제거하지 않으므로 sort file1 명령어 후에 uniq file1 해야 파일 전체에서 중복을 제거할 수 있다.

  • sort file2 | uniq : sort 후에 uniq를 파이프로 연결하여 실행

  • sort -u file2 : 파일 전체에서 중복 제거하는 옵션

  • sort file2 | uniq -c : 중복을 전체에서 제거한 후, 해당 데이터의 개수를 표시한다.

  • sort file2 | uniq -c | sort -rn : 중복이 가장 많은 순서대로 정렬.

  • sort file2 | uniq -c | sort -n : 역순이 아닌 적은 순서대로 출력.


12.4 cut : 입력의 일부 추출하기

  • 사용법 : cut -d<구분자> -f<필드번호> 파일명

  • cut -d : -f 7 /etc/passwd : 구분자는 /etc/passwd의 결과에서 : 7번 필드만 추출한다. 7번 필드는 로그인 셸이다.

  • -d : 구분자를 지정하는 옵션이다. 기본값은 tab이다.
    cut -d , -f 1,6,7 /etc/passwd : -f는 추출할 필드를 의미한다.

  • /etc/passwd/의 각 필드의 의미
    사용자 이름
    암호
    uid
    gid
    주석
    홈 디렉토리
    로그인 셸


12.5 tr : 문자 교환과 삭제하기

  • 사용법 : tr <치환 전 문자> <치환 후 문자>

  • cat /etc/passwd | tr abc ABC : abcABC 로 치환한다.
    각각 a→A b→B c→C로 바꾼다. 문자열을 바꾸는 것이 아니다.

  • cat /etc/passwd | tr a-z A-Z : 소문자를 모두 대문자로 치환한다. 하이픈을 사용한다.

  • 문자열 단위로 치환할 때는 sedawk를 사용한다.

  • 표준 입력만 받아들이고, 파일을 인자로 받을 수 없다.
    텍스트 파일을 읽게 하려면 cat의 결과를 파이프로 전달하거나 < 로 리다이렉션 해야 한다.
    tr : , /etc/passwd : 실행 불가

  • tr -d <삭제할 문자> : 문자를 삭제한다.
    주로 개행문자를 지울 때 사용한다. 줄바꿈을 없앤다.

    • cat /etc/passwd | tr -d bac : bac문자를 삭제한다.
    • cat /etc/passwd | tr -d “\n” : 개행문자를 삭제한다.

12.6 tail : 마지막 부분 출력하기

  • 파일 모니터링 시 주로 사용한다.
    로그처럼 파일 내용이 계속 추가되는 경우 tail -f를 사용한다.
    추가될 때마다 실시간으로 내용을 출력하여 파일을 모니터링 할 수 있다.

  • tail -f output.log : 실행 시 커서가 멈춘다. 모니터링 상태가 된다.

  • echo hello >> output.log : log파일에 hello 문자열 추가하면 모니터링 중인 터미널에 hello가 출력된다.

  • ctrl+c로 빠져나온다.


12.7 diff : 차이 출력하기

  • diff 편집전 편집후 : 두 파일의 차이점을 출력한다.

  • diff .bashrc.org .bashrc

  • 12c12 : 비교 파일에서 어떤 변화가 있는지 나타낸다. 12행 부분이 12행으로 변경됨.

    • <범위 1>a<범위 2> : 첫 파일의 범위 1에 두번째 파일의 범위 2 의 내용이 추가됨. add
    • <범위 1>c<범위 2> : 첫 파일의 범위 1 부분이 두 번째 파일의 범위 2 의 내용으로 변경됨. change
    • <범위 1>d<범위 2> : 첫 파일의 범위 1 부분이 삭제. delete
jisu@comui-MacBookPro ch12 % diff .zshrc.orgg .zshrc
1c1,2
< alias python=/usr/bin/python3
---
> alias PYTHON=/USR/BIN/PYTHON
> jisu3
jisu@comui-MacBookPro ch12 %
  • 첫 파일의 1행이 두 번째 파일의 1행, 2행 내용으로 변경됨.

  • < : 지워진 행. 첫 번째 파일에만 있는 행

  • > : 추가된 행. 두 번째 파일에만 있는 행

  • 5c5 : 파일1의 5번째 행이 파일2의 5번째 행으로 변경

  • 20,21d19 : 파일1의 20번째 행과 21번째 행이 삭제됨. 파일2 19행과 다르다.

  • 40a39,41 : 파일1의 40번째 행에 파일2의 39~41의 내용이 추가됨.

diff -u : 통일 포맷

  • diff -u : 통일 포맷. 차이를 출력하는 형식 통일. 더 자세히 보여준다.
jisu@comui-MacBookPro ch12 % diff -u .zshrc.orgg .zshrc
--- .zshrc.orgg	2023-10-26 11:25:25
+++ .zshrc	2023-10-26 11:28:01
@@ -1 +1 @@
-alias python=/usr/bin/python3
+alias PYTHON=/USR/BIN/PYTHON
  • --- : 비교 파일 이름과 변경 시각. 파일에 대한 정보를 나타낸다.

  • +++ : 비교 파일 이름과 변경 시각.

  • @@ : @@ - 파일1의 변경이 시작된 행, 변경된 행수 + 파일2의 변경 시작 행, 변경된 행수@@

  • 헝크 : 바뀐 범위. @@ @@로 시작된다.

  • -17, 8 +17,6 : 헝크의 헤더. 첫 번째 파일의 17번째 행부터 8행,
    두 번째 파일의 17행부터 6행

패치 파일 만들기

  • diff -u .bashorg .bashrc > patchfile : 패치 파일 생성

  • patch .bashrcorg patchfile : .bashrc.org의 내용이 수정된 .bashrc와 동일하게 된다.

  • 크기가 큰 파일을 변경했을 때 굳이 파일 전체를 전달하지 않아도 된다.

  • 패치 : 변경된 내용만 담은 파일

  • patch 명령어로 적용할 수 있다.

  • 패치 적용 시 원본이 변경되어 행 번호가 변경되었다면 에러가 발생할 수 있다.

  • 통일 포맷을 사용하면 변경 앞뒤의 내용이 포함되어 있어 변경되어도 어느정도 성공한다.

  • 통일 포맷을 git에서도 사용되고 있다.

profile
안녕하세요.

0개의 댓글