×

    [Cookbook] Bash에서 text(string) 다루기, 이럴 때 이렇게 한다.

    기초

    여러 파일을 separator를 추가하여 합쳐보자

    # append a newline after each file
    sed -s '$G' *.txt > all.txt
    # append a line of 8 dashes and a newline after each file
    sed -s '$a--------' *.txt
    
    # Insert a line of dashes before each file:
    sed -s '1i--------' *.txt
    # Do the same, but without a newline after the dashes:
    sed -s '1s/^/--------/' *.txt
    # Put a line of dashes on the end of the last line of each file:
    sed -s '$s/$/--------/' *.txt
    # Surround each file with curly braces:
    sed -s -e '1i{' -e '$a}' *.txt
    

    REF

    파일에서 어떤 부분을 지워보자

    빈줄을 지워보자.

    sed '/^$/d' text.txt
    

    특정 패턴을 지워보자

    # 정규식으로 "((OR))"로 시작하는 줄만 지워보자
    sed -r '/^\(\((OR)\)\)/d' org.txt > rst.txt
    

    특정 패턴만 남기고 지워보자

    # 정규식으로 "((OR))"로 시작하는 줄만 남기고 지워보자
    sed -r '/^\(\((OR)\)\)/!d' org.txt > rst.txt
    

    폴더 속에 있는 텍스트 파일의 글자 길이를 알아보자

    ls | xargs wc -c
    

    REF

    파일 속에서 불필요한 내용을 빼고 토큰을 공백으로 구분해보자

    아래와 같이 clean_and_tokenize.sh 배치 파일을 만들어 실행한다.

    #!/bin/bash
    # clean_and_tokenize.sh inputfile.txt outputfile.txt
    tr '[:upper:]' '[:lower:]' < $1 | # 입력파일($1)을 받아 대문자를 소문자로 바꾼다.
      tr '[:punct:]' ' ' |   # 구두기호를 스페이스 한 칸으로 바꾼다.
      tr '[:space:]' ' ' |   # 공백을 스페이스 한 칸으로 바꾼다.
      tr -cd '[:alnum:] ' |   # 모든 숫자와 알파벳을 제외한('-c') 글자를 삭제('-d')한다.
      tr -s ' ' > $2     # 연속된('-s') 공백을 스페이스 한 칸으로 바꾼다. # 결과 파일($2)에 넣어 준다.
    

    REF

    파일 속에 있는 단어 당 출현 빈도를 목록으로 만들어 보자

    아래와 같이 word_freq.sh 배치 파일을 만들어 실행한다.

    단어는 공백을 기준으로 구분한다.

    #!/bin/bash
    # word_freq.sh inputfile.txt outputfile.txt
    tr ' ' '\n' < $1 |  # 입력파일($1)을 받아 공백을 모두 개행으로 찾아 바꾼다.
      sort -S 10G |   # 소팅한다
      uniq -c |    # 등장 단어와 횟수를('-c') 출력한다
      awk '{print $2" "$1}' > $2  # 원하는 부분만 빼서 # 결과 파일($2)에 넣어 준다.
    

    REF

    ... ... ... ...
    Back