본문으로 바로가기

목차

    1. echo

    - 화면에 한 줄의 문자열을 출력한다.

    - echo는 주어진 문자열을 문자열 사이에 포함된 공백과 줄 마지막에 개행 문자를 포함하여 표준 출력으로 내보낸다. 만약 -n 옵션이 주어졌다면 마지막에 개행 문자를 출력하지 않는다.

    옵션
           -n     마지막에 개행문자를 출력하지 않는다.
    
           -e     문자열에서 다음 백슬래쉬로 이스케이프된 문자의 번역을 하도록 한다:
                  \a     경고음 (벨)
                  \b     백스페이스
                  \c     마지막 개행문자를 사용하지 않는다.
                  \f     폼 피드
                  \n     개행문자
                  \r     캐리지 리턴
                  \t     수평 탭
                  \v     수직 탭
                  \\     백슬래쉬
                  \ nnn  ASCII 코드가 nnn (8진수)인 문자

    1.1. 파일 생성

    - 해당 파일명으로 파일이 없는 경우 파일이 새로 생성됩니다.

     

    파일 생성

    # echo "echo test" > test_echo1.txt
    # cat test_echo1.txt
    echo test

    e옵션을 사용하여 개행(\n) 추가

    # echo -e "this is echo test \nnew line test" > test_echo2.txt
    # cat test_echo2.txt
    this is echo test
    new line test

    1.2. 파일 수정

    - 해당 파일명이 존재할 경우 해당 파일을 수정합니다.

    1.2.1. >와 >>의 차이

    >: 명령어 뒤에 나오는 파일에 쓸 때 , 덮어쓸 때 사용(= write or overwrite)
    >>: 명령어 뒤에 나오는 파일에 추가할 때 사용(= append)

    1.2.2. 덮어쓰기(>)

    - test_echo2.txt에 덮어 써봅니다.

    # ls
    test_echo1.txt  test_echo2.txt
    
    # cat test_echo2.txt
    this is echo test
    new line test
    
    # echo "Modify the file." > test_echo2.txt
    # cat test_echo2.txt
    Modify the file.

    1.2.3. 이어 쓰기(>>)

    - test_echo2.txt에 이어 써 봅니다.

    # echo "Writing in relay." >> test_echo2.txt
    # cat test_echo.txt
    Modify the file.
    Writing in relay.

     


    2. cat

    - 파일을 연결하고 표준 출력으로 인쇄합니다.

    개요
           cat [OPTION]... [FILE]...
    
    옵션
           -A, --show-all
                  -vET 옵션을 사용한 것과 같은 효과를 본다.
    
           -b, --number-nonblank
                  비어 있지 않은 라인 번호 왼쪽에 출력한다.
    
           -e     equivalent to -vE
    			  제어 문자를 ^ 형태로 출력하면서 각 행의 끝에 $를 추가하여 출력한다.
                  
           -E, --show-ends
                  행마다 끝에 $ 문자를 출력한다.
    
           -n, --number
                  비어 있는 행도 포함하여 라인 번호 왼쪽에 출력한다.
    
           -s, --squeeze-blank
                  연속되는 2개이상의 빈 행을 한행으로 출력한다.
    
           -t     equivalent to -vT
    
           -T, --show-tabs
                  탭(tab) 문자를 출력한다.
    
           -u     (ignored)
    
           -v, --show-nonprinting
                  tab과 행 바꿈 문자를 제외한 제어 문자를 ^ 형태로 출력한다.
    
           --help display this help and exit
    
           --version
                  버전 정보 출력 및 종료

    2.1. 파일 생성

    - 해당 파일명으로 파일이 없는 경우 파일이 생성됩니다.

    2.1.1 기본

    - cat 명령어를 이용해 텍스트를 다 입력한 후 ctrl+d 또는 ctrl+c로 종료해 편집을 마무리합니다.

       ctrl+z : 백그라운드로 작업전환
       ctrl+d : 정상종료
       ctrl+c : 강제 종료

    # cat > test_cat1.txt
    cat test
    
    (ctrl+d 또는 ctrl+c를 눌러 편집을 종료)
    
    # cat test_cat1.txt
    cat test

    2.1.2 응용(Line Number 추가)

    - n옵션을 이용해 행 번호를 넣을 수 있습니다.

    # cat -n > test_cat2.txt
    line 1
    line 2
    line 3
    
    (ctrl+d 또는 ctrl+c를 눌러 편집을 종료)
    
    # cat test_cat2.txt
         1  line 1
         2  line 2
         3  line 3

    2.1.3 EOF

    - ctrl+d 또는 ctrl+c 대신 EOF(End of File)를 입력하면 작업을 끝냅니다.

    - EOF 대신에 다른 텍스트를 명령어로 입력해 사용할 수도 있습니다.

    # cat << EOF > test_cat3.txt
    > cat test eof
    > EOF
    
    # cat test_cat3.txt
    cat test eof
    # cat << END > test_cat4.txt
    > cat test end
    > END
    
    # cat test_cat4.txt
    cat test end

    2.2. 파일 수정

    - 해당 파일명이 존재할 경우 해당 파일을 수정합니다.

    2.2.1. 덮어쓰기(>)

    - test_cat4.txt에 덮어 써 봅니다.

    # ls
    test_cat1.txt  test_cat2.txt  test_cat3.txt  test_cat4.txt
    
    # cat test_cat4.txt
    cat test end
    
    # cat << EOF > test_cat4.txt
    > Modify the file. (cat)
    > EOF
    
    # cat test_cat4.txt
    Modify the file. (cat)

    2.2.2. 이어 쓰기(>>)

    # cat test_cat4.txt
    Modify the file. (cat)
    
    # cat << EOF >> test_cat4.txt
    > Writing in relay. (cat)
    > EOF
    
    # cat test_cat4.txt
    Modify the file. (cat)
    Writing in relay. (cat)

    2.3 파일 내용 삭제

    - 파일은 삭제하지 않고 파일 내용만 지울 경우에 사용합니다.

    # cat test_cat4.txt
    Modify the file. (cat)
    Writing in relay. (cat)
    
    # cat /dev/null > test_cat4.txt
    
    # ls
    test_cat4.txt
    
    # cat test_cat4.txt

     


    3. sed

    - 텍스트 필터링 및 변환을 위한 스트림 편집기

    - 텍스트를 분해하거나 변환하기 위한 프로그램

    - 수정, 치환, 삭제, 추가 등 다양하게 파일을 편집 가능하고 원하는 정보만 출력할 수도 있습니다.

    - 실제로 파일을 수정하려면 -i 옵션을 사용해서 수정해주면 됩니다.

       (실습을 위해 -i옵션은 사용하지 않은 상태로 출력만 할 것입니다.)

    개요
           sed [OPTION]... {script-only-if-no-other-script} [input-file]...
    옵션
           -n, --quiet, --silent
                  suppress automatic printing of pattern space
    
           -e script, --expression=script
                  add the script to the commands to be executed
    
           -f script-file, --file=script-file
                  add the contents of script-file to the commands to be executed
    
           --follow-symlinks
                  follow symlinks when processing in place
    
           -i[SUFFIX], --in-place[=SUFFIX]
                  edit files in place (makes backup if SUFFIX supplied)
    
           -c, --copy
                  use copy instead of rename when shuffling files in -i mode
    
           -b, --binary
                  does nothing; for compatibility with WIN32/CYGWIN/MSDOS/EMX ( open files in binary mode (CR+LFs are not treated specially))
    
           -l N, --line-length=N
                  specify the desired line-wrap length for the `l' command
    
           --posix
                  disable all GNU extensions.
    
           -r, --regexp-extended
                  use extended regular expressions in the script.
    
           -s, --separate
                  consider files as separate rather than as a single continuous long stream.
    
           -u, --unbuffered
                  load minimal amounts of data from the input files and flush the output buffers more often
    
           -z, --null-data
                  separate lines by NUL characters
    
           --help
                  display this help and exit
    
           --version
                  output version information and exit

     

    - 실습을 위해 다음과 같은 파일을 미리 생성합니다.

    # cat stock.txt
    NASDAQ aapl price is $148.97
    NASDAQ msft price is $295.71
    NASDAQ tsla price is $736.27
    
    NYSEARCA spy price is $445.44
    NYSEARCA sso price is $128.66
    NYSEARCA spxl price is $119.02
    NYSEARCA upro price is $126.65
    
    NASDAQ qqq price is $376.59
    NYSEARCA qld price is $80.66
    NASDAQ tqqq price is $145.55
    
    NYSE net price is $127.48
    NYSE cpng price is $29.98
    
    KOSPI samsung electronics price is \75,300
    KOSPI naver price is \410,000
    KOSPI kakao price is \130,000
    
    KOSDAQ kakaogames price is \73,800
    KOSDAQ Seegene price is \63,200

    3.1. 추가

    3.1.1. 특정 행에 내용 추가

    - 1번 행에 내용을 추가합니다.

      # sed  '행 번호i\내용' 파일명

    - 해당 파일의 해당 행의 내용이 존재해야 하며 해당 행의 내용은 1칸 밀리게 됩니다.

      (EX. 4번 행에 추가할 경우 4번행은 5번 행으로 밀리고 4번행에 새로운 내용이 들어갑니다.)

    # cat -n stock.txt
         1  NASDAQ aapl price is $148.97
         2  NASDAQ msft price is $295.71
         3  NASDAQ tsla price is $736.27
         4
         ... (생략)
        20
        21  KOSDAQ kakaogames price is \73,800
        22  KOSDAQ Seegene price is \63,200
        
    # sed '1 i\NASDAQ amzn price is $3,469.15' stock.txt | cat -n
         1  NASDAQ amzn price is $3,469.15
         2  NASDAQ aapl price is $148.97
         3  NASDAQ msft price is $295.71
         4  NASDAQ tsla price is $736.27
         ... (생략)
        20  KOSPI kakao price is \130,000
        21
        22  KOSDAQ kakaogames price is \73,800
        23  KOSDAQ Seegene price is \63,200

    3.1.2. 마지막 행에 내용 추가

    # sed '$s/$/\n내용/g' 파일명

    # sed '$s/$/\nNASDAQ amzn price is $3,469.15/g' stock.txt | cat -n
         1  NASDAQ aapl price is $148.97
         2  NASDAQ msft price is $295.71
         3  NASDAQ tsla price is $736.27
         4
         ... (생략)
        21  KOSDAQ kakaogames price is \73,800
        22  KOSDAQ Seegene price is \63,200
        23  NASDAQ amzn price is $3,469.15

    3.2. 삭제

    3.2.1. 특정 행 삭제하기

    # sed '행 번호d' 파일명

    2번행 삭제
    
    # sed '2d' stock.txt | cat -n
         1  NASDAQ aapl price is $148.97
         2  NASDAQ tsla price is $736.27
         3
         4  NYSEARCA spy price is $445.44
         ... (생략)
        20  KOSDAQ kakaogames price is \73,800
        21  KOSDAQ Seegene price is \63,200

     

    - 지정한 시작 행부터 도착 행까지 삭제

    # sed '시작 행, 도착 행 d' 파일명

    1~4 행 까지 삭제
    
    # sed '1,4d' stock.txt | cat -n
         1  NYSEARCA spy price is $445.44
         2  NYSEARCA sso price is $128.66
         3  NYSEARCA spxl price is $119.02
         4  NYSEARCA upro price is $126.65
         ... (생략)
        16
        17  KOSDAQ kakaogames price is \73,800
        18  KOSDAQ Seegene price is \63,200

    3.2.2. 해당 문자가 포함된 줄 삭제

    # sed '/삭제할 내용/d' 파일명

    NASDAQ이 포함 된 모든 행 삭제
    
    # sed '/NASDAQ/d' stock.txt | cat -n
         1
         2  NYSEARCA spy price is $445.44
         3  NYSEARCA sso price is $128.66
         4  NYSEARCA spxl price is $119.02
         5  NYSEARCA upro price is $126.65
    	 ... (생략)
        16  KOSDAQ kakaogames price is \73,800
        17  KOSDAQ Seegene price is \63,200

    3.2.3. 해당 문자가 포함된 줄만 빼고 나머지 행 모두 삭제 

    - 원하는 내용만 보고 싶을 때 유용합니다.

    # sed '/삭제하지 않을 내용/!d' 파일명

    NASDAQ을 포함하지 않는 모든 행을 삭제
    
    # sed '/NASDAQ/!d' stock.txt
    NASDAQ aapl price is $148.97
    NASDAQ msft price is $295.71
    NASDAQ tsla price is $736.27
    NASDAQ qqq price is $376.59
    NASDAQ tqqq price is $145.55

    3.2.4. 마지막 행 삭제

    # sed '$d' 파일명

    # sed '$d' stock.txt | cat -n
         1  NASDAQ aapl price is $148.97
         2  NASDAQ msft price is $295.71
         3  NASDAQ tsla price is $736.27
    	 ... (생략)
        17  KOSPI samsung electronics price is \75,300
        18  KOSPI naver price is \410,000
        19  KOSPI kakao price is \130,000
        20
        21  KOSDAQ kakaogames price is \73,800

    3.2.5. 공백 행 지우기(내용이 없는 행)

    # sed -i '/^$/d' 파일명

    # sed '/^$/d' stock.txt
    NASDAQ aapl price is $148.97
    NASDAQ msft price is $295.71
    NASDAQ tsla price is $736.27
    NYSEARCA spy price is $445.44
    NYSEARCA sso price is $128.66
    NYSEARCA spxl price is $119.02
    NYSEARCA upro price is $126.65
    NASDAQ qqq price is $376.59
    NYSEARCA qld price is $80.66
    NASDAQ tqqq price is $145.55
    NYSE net price is $127.48
    NYSE cpng price is $29.98
    KOSPI samsung electronics price is \75,300
    KOSPI naver price is \410,000
    KOSPI kakao price is \130,000
    KOSDAQ kakaogames price is \73,800
    KOSDAQ Seegene price is \63,200

    3.3. 치환

    3.3.1 파일 내용 변경

    - 해당 내용을 가지고 있는 모든 행의 내용을 치환합니다.

    # sed 's/기존 내용/변경할 내용/g' 파일명

    "price is"를 ":" 으로 치환
    
    # sed 's/price is/:/g' stock.txt | cat -n
         1  NASDAQ aapl : $148.97
         2  NASDAQ msft : $295.71
         3  NASDAQ tsla : $736.27
         ... (생략)
        21  KOSDAQ kakaogames : \73,800
        22  KOSDAQ Seegene : \63,200

    3.3.2. 특정 행 전체 치환

    - 특정 행에만 적용

    # sed '특정 행s/.*/변경할 내용/g' 파일명

    2번 행 치환
    
    # sed '2s/.*/null/g' stock.txt | cat -n
         1  NASDAQ aapl price is $148.97
         2  null
         3  NASDAQ tsla price is $736.27
         4
         5  NYSEARCA spy price is $445.44
         6  NYSEARCA sso price is $128.66
         7  NYSEARCA spxl price is $119.02
         8  NYSEARCA upro price is $126.65
    	 ... (생략)

    - 시작 행부터 도착 행까지만 적용

    # sed '시작 행,도착 행s/.*/변경할 내용/g' 파일명 

    2번 행부터 마지막 행 까지 치환
    
    # sed '2,$s/.*/null/g' stock.txt | cat -n
         1  NASDAQ aapl price is $148.97
         2  null
         3  null
         4  null
         5  null
         6  null
         7  null
         8  null
         9  null
        10  null
        11  null
        12  null
        13  null
        14  null
        15  null
        16  null
        17  null
        18  null
        19  null
        20  null
        21  null
        22  null

    3.3.3. 특정 행에서만 일치하는 파일 내용 변경

    - 변경할 행을 지정해서 해당 행에서만 일치하는 내용만 치환합니다.

     

    - 특정 행에만 적용

    # sed '특정 행s/기존 내용/변경할 내용/g' 파일명

    2번 행의 해당하는 내용 치환
    
    # sed '2s/price is/:/g' stock.txt | cat -n
         1  NASDAQ aapl price is $148.97
         2  NASDAQ msft : $295.71
         3  NASDAQ tsla price is $736.27
         4
         5  NYSEARCA spy price is $445.44
         6  NYSEARCA sso price is $128.66
         7  NYSEARCA spxl price is $119.02
         8  NYSEARCA upro price is $126.65
         9
        10  NASDAQ qqq price is $376.59
        11  NYSEARCA qld price is $80.66
        12  NASDAQ tqqq price is $145.55
        13
        14  NYSE net price is $127.48
        15  NYSE cpng price is $29.98
        16
        17  KOSPI samsung electronics price is \75,300
        18  KOSPI naver price is \410,000
        19  KOSPI kakao price is \130,000
        20
        21  KOSDAQ kakaogames price is \73,800
        22  KOSDAQ Seegene price is \63,200

     

    - 시작 행부터 도착 행까지만 적용 

    # sed '시작 행,도착 행s/기존 내용/변경할 내용/g' 파일명 

    1번 행부터 3번 행까지 해당하는 내용 치환
    
    sed '1,3s/price is/:/g' stock.txt | cat -n
         1  NASDAQ aapl : $148.97
         2  NASDAQ msft : $295.71
         3  NASDAQ tsla : $736.27
         4
         5  NYSEARCA spy price is $445.44
         6  NYSEARCA sso price is $128.66
         7  NYSEARCA spxl price is $119.02
         8  NYSEARCA upro price is $126.65
         9
        10  NASDAQ qqq price is $376.59
        11  NYSEARCA qld price is $80.66
        12  NASDAQ tqqq price is $145.55
        13
        14  NYSE net price is $127.48
        15  NYSE cpng price is $29.98
        16
        17  KOSPI samsung electronics price is \75,300
        18  KOSPI naver price is \410,000
        19  KOSPI kakao price is \130,000
        20
        21  KOSDAQ kakaogames price is \73,800
        22  KOSDAQ Seegene price is \63,200

    3.3.4. 특정 내용을 범위로 일치하는 파일 내용 변경

    # sed '/시작 내용/,/도착 내용/s/기존 내용/변경할 내용/' 파일명

    EX) # sed '/aapl/,/$736.27/s/price is/:/g' stock.txt

    "aapl" ~ "$736.27" 내용 범위에서 "price is"를 ":"로 치환

     

    NASDAQ aapl price is $148.97
    NASDAQ msft price is $295.71
    NASDAQ tsla price is $736.27
    ... (생략)
    KOSDAQ kakaogames price is \73,800
    KOSDAQ Seegene price is \63,200

    # sed '/aapl/,/$736.27/s/price is/:/g' stock.txt | cat -n
         1  NASDAQ aapl : $148.97
         2  NASDAQ msft : $295.71
         3  NASDAQ tsla : $736.27
         4
         5  NYSEARCA spy price is $445.44
         6  NYSEARCA sso price is $128.66
         7  NYSEARCA spxl price is $119.02
         8  NYSEARCA upro price is $126.65
         9
        10  NASDAQ qqq price is $376.59
        11  NYSEARCA qld price is $80.66
        12  NASDAQ tqqq price is $145.55
        13
        14  NYSE net price is $127.48
        15  NYSE cpng price is $29.98
        16
        17  KOSPI samsung electronics price is \75,300
        18  KOSPI naver price is \410,000
        19  KOSPI kakao price is \130,000
        20
        21  KOSDAQ kakaogames price is \73,800
        22  KOSDAQ Seegene price is \63,200

    3.4. 출력

    3.4.1. 특정 행 출력

    # sed -n '특정 행p' 파일명

    # sed -n '시작 행,도착 행p' 파일명

    2번 행 출력
    # sed -n '2p' stock.txt
    NASDAQ msft price is $295.71
    
    2~3번 행 출력
    # sed -n '2,3p' stock.txt
    NASDAQ msft price is $295.71
    NASDAQ tsla price is $736.27
    
    2~끝 행 출력
    # sed -n '2,$p' stock.txt | cat -n
         1  NASDAQ msft price is $295.71
         2  NASDAQ tsla price is $736.27
         3
    	 ... (생략)
        19
        20  KOSDAQ kakaogames price is \73,800
        21  KOSDAQ Seegene price is \63,200

    3.4.2. 특정 행(비연속) 출력

    # sed -n -e '특정 행1p' -e '특정 행2p' 파일명

    # sed -n -e '시작 행1,도착 행1p' -e '시작 행2,도착 행2p' 파일명

    1번, 5번, 10번 행 출력
    # sed -n -e '1p' -e '5p' -e '10p' stock.txt
    NASDAQ aapl price is $148.97
    NYSEARCA spy price is $445.44
    NASDAQ qqq price is $376.59
    
    1~2, 5~6, 10~11 행 출력
    # sed -n -e '1,2p' -e '5,6p' -e '10,11p' stock.txt | cat -n
         1  NASDAQ aapl price is $148.97
         2  NASDAQ msft price is $295.71
         3  NYSEARCA spy price is $445.44
         4  NYSEARCA sso price is $128.66
         5  NASDAQ qqq price is $376.59
         6  NYSEARCA qld price is $80.66

    3.4.3. 특정 단어 포함 행 출력

    # sed -n '/특정 단어/p' 파일명

    # sed -n '/NASDAQ/p' stock.txt
    NASDAQ aapl price is $148.97
    NASDAQ msft price is $295.71
    NASDAQ tsla price is $736.27
    NASDAQ qqq price is $376.59
    NASDAQ tqqq price is $145.55
    
    # sed -n '/KOSPI/p' stock.txt
    KOSPI samsung electronics price is \75,300
    KOSPI naver price is \410,000
    KOSPI kakao price is \130,000

    3.4.4. 특정 내용으로 시작하는/끝나는 행 출력

    # sed -n '/^특정 내용/p' 파일명

    # sed -n '/특정 내용$/p' 파일명

    NYSEARCA로 시작하는 행 출력
    # sed -n '/^NYSEARCA/p' stock.txt
    NYSEARCA spy price is $445.44
    NYSEARCA sso price is $128.66
    NYSEARCA spxl price is $119.02
    NYSEARCA upro price is $126.65
    NYSEARCA qld price is $80.66
    
    7로 끝나는 행 출력
    # sed -n '/7$/p' stock.txt
    NASDAQ aapl price is $148.97
    NASDAQ tsla price is $736.27

    3.4.5. 특정 내용을 범위로 해당 행 출력

    # sed -n '/시작 내용/,/도착 내용/p' 파일명

    # sed -n '/aapl/,/tsla/p' stock.txt
    NASDAQ aapl price is $148.97
    NASDAQ msft price is $295.71
    NASDAQ tsla price is $736.27

     


    4. 기타

    4.1. [] 씌우기

    # sed 's/\([^ ]*\)/[&]/g' stock.txt
    [NASDAQ] [aapl] [price] [is] [$148.97]
    [NASDAQ] [msft] [price] [is] [$295.71]
    [NASDAQ] [tsla] [price] [is] [$736.27]
    []
    [NYSEARCA] [spy] [price] [is] [$445.44]
    [NYSEARCA] [sso] [price] [is] [$128.66]
    [NYSEARCA] [spxl] [price] [is] [$119.02]
    [NYSEARCA] [upro] [price] [is] [$126.65]
    []
    [NASDAQ] [qqq] [price] [is] [$376.59]
    [NYSEARCA] [qld] [price] [is] [$80.66]
    [NASDAQ] [tqqq] [price] [is] [$145.55]
    []
    [NYSE] [net] [price] [is] [$127.48]
    [NYSE] [cpng] [price] [is] [$29.98]
    []
    [KOSPI] [samsung] [electronics] [price] [is] [\75,300]
    [KOSPI] [naver] [price] [is] [\410,000]
    [KOSPI] [kakao] [price] [is] [\130,000]
    []
    [KOSDAQ] [kakaogames] [price] [is] [\73,800]
    [KOSDAQ] [Seegene] [price] [is] [\63,200]