<* 텍스트 처리 및 검색 *>
[ 1 ] cat : 파일 내용 출력 (Concatenate)
◆ cat 명령어는 리눅스에서 파일 또는 텍스트 파일의 내용을 화면에 출력하는 명령어이다.
◆ concatenate에서 유래했고 '연결시키다'의 의미를 가지고 있다.
◆ 여러 파일을 입력으로 사용하거나 파이프 또는 리다이렉션과 사용하여 다른 파일과 프로그램을 연결할 때도 사용된다.
< 기본 형식 > cat [옵션] [파일]
[ 옵션 ]
• -A --show-all 옵션 -vET와 같음. 탭(TAB) / 줄바꿈(LFD)을 포함한 문자를 표시 한다.
• -b --number-nonblank 비어 있지 않은 라인에만 첫번째 열에 번호를 표시 한다.
• -e - 옵션 -vE와 같음. 줄바꿈(LFD)을 포함한 문자를 표시 한다.
• -E --show-ends 라인의 마지막과 비어있는 라인에도 '$' 기호를 표시 한다.
• -n --number 모든 라인(비어있는 라인에도) 앞 번호를 출력한다.
• -s --squeeze-blank 두번 이상 연속된 빈 라인(empty line)을 출력 하지 않는다.
• -t - 옵션 -vT와 같음. 탭(TAB)을 포함한 문자를 표시 한다.
• -T --show-tabs 탭 문자를 ^I로 바꿔서 출력한다.
• -u - (ignored)
• -v --show-nonprinting 탭(TAB)과 줄바꿈(LFD)을 제외한 문자를 ^,M-를 사용하여 표시한다.
• - --help cat 명령어의 사용법을 출력한다.
• - --version cat 명령어의 버전을 출력한다.
** < cat 명령어로 파일 생성 > **
파일 생성) cat > [파일명]
덮어쓰기) cat > [파일명]
이어 쓰기) cat >> [파일명]
[ 2 ] paste: 파일 병합
◆ 여러 파일의 내용을 붙여서 정렬하여 화면에 출력할 수 있는 명령어 이다.
- 각 파일의 행들을 읽어서 대응되는 것을 탭으로 구분하여 병합하는 명령어
◆ paste는 잘 알려지지 않고 사용되는 Linux 및 Unix 명령줄 유틸리티 중 하나입니다.
< 기본 형식 > paste [옵션] [파일명]
[ 옵션 ]
• -s : 한 파일의 내용을 한 줄로 보여준 후 다른 파일의 내용을 한 줄로 덧붙인다.
• -d : 출력되는 내용의 구분자를 지정한다.
예 ) file1 과 file2 의 내용을 입력한다.
$ vi file1.txt
red
blue
white
$ vi file2.txt
yellow
green
gray
block
$ paste file1.txt file2.txt
red yellow
blue green
white gray
block
$ paste file1.txt file2.txt > file3.txt
$ cat file3.txt
red yellow
blue green
white gray
block
$ paste -d : file1.txt file2.txt
red : yellow
blue : green
white : gray
: block
$ paste -s -d "%" file1.txt file2.txt
red%blue%white
yellow%green%gray%black
[ 3 ] cut: 파일에서 필드 추출
◆ 파일 내용을 각 필드로 구분하고 필드별로 내용을 추출하며 각 필드들을 구분자로 구분할 수 있는 명령어 이다.
< 기본 형식 > cut [옵션] [파일명]
[ 옵션 ]
• -b, --bytes : 바이트를 기준으로 잘라낸다.
• -c, --characters : 문자수로 열을 계산해서 출력한다.
• -d, --delimiter : <구분자> 파일 내의 필드로 따져서 추출한다. (default는 TAB)
• -f, --fields : 필드를 기준으로 잘라낸다.
• -z, --zero-terminated : 라인의 구분자를 개행문자가 아닌 NUL 을 사용한다.
• -s : <구분자> 필드 구분자를 사용하며 필드 구분자를 포함할 수 없다면 그 행은 수행x
예 )
$ cat testfile.txt
1234
123 456 789 <----- 공백 구분자
123 456 789 <------TAB 구분자
abc def ghi <------ 공백 구분자
abc def ghi <------ TAB 구분자
$ cut -c 1-3 testfile.txt <--- 1~3열 출력
123
123
123
abc
abc
$ cut -f 3 testfile.txt <-- 1~3번째 필드 까지 출력
1234
123 456 789
789
abc def ghi
ghi
$ cut -f 2 -d 4 cut_test.txt <---- 필드 구분 문자 : 4, 2번째 필드 출력
56 789
56 789
56 789i
abc def ghi
[ 4 ] diff
◆ differences의 약자로 두 파일 사이의 내용을 비교하는 명령어
◆ cmp 명령보다는 diff 명령어가 보다 직관적이고 명확하게 결과를 알려준다.
◆ 일반적으로 하나의 파일 버전과 동일한 파일의 다른 버전 간의 변경사항을 보여주는데 쓰인다.
◆ 3개의 파일까지 비교 가능하다.
< 기본 형식 > diff [옵션] [파일명1] [파일명2]
[ 옵션 ]
• -c : 두 파일간의 차이점 출력
• -d : 두 파일간의 차이점을 상세하게 출력
• -r : 두 디렉토리간의 차이점 출력, 서브디렉토리 까지 비교
• -i : 대소문자의 차이 무시
• -w : 모든 공백 차이무시
• -s : 두 파일이 같을 때 알림
• -u : 두 파일의 변경되는 부분과 변경되는 부분의 근처의 내용도 출력
예 )
a.txt의 파일 내용 : aaaa
b.txt의 파일 내용 : bbbb
c.txt의 파일 내용 : aaaa
$ diff a.txt b.txt
파일 내용이 같기 떄문에 아무것도 출력되지 않음
$ diff a,txt b.txt
1C1
< aaaa
---
> bbbb
< 는 a.txt 에만 있는 내용이고, >는 b.txt 에만 있는 내용을 나타낸다.
$ diff -u a,txt b.txt
- 는 a,txt에만 있는 내용, +는 b.txt 에만 있는 내용
a 파일이 b가 되기 위해서는 aaaa가 빠지고 bbbb가 추가되어야 한다는 내용
[ 5 ] file : 파일 유형 확인
◆ file명령어는 지정된 파일의 종류(타입)를 확인하는 명령어이다
▪ 해당 파일이 어떤 파일인지 표시 : 텍스트 파일 (ASCII) 인지 실행 파일 (Executable) 인지 ..등
< 기본 형식 > file [옵션] [표현식] [파일 위치]
[ 옵션 ]
• -P : 심볼릭 링크를 따라가지 않고, 심볼릭 링크 자체 정보 사용.
• -L : 심볼릭 링크에 연결된 파일 정보 사용.
• -H : 심볼릭 링크를 따라가지 않으나, Command Line Argument를 처리할 땐 예외.
• -D : 디버그 메시지 출력.
[ 표현식 ]
• -name : 지정된 문자열 패턴에 해당하는 파일 검색.
• -empty : 빈 디렉토리 또는 크기가 0인 파일 검색.
• -delete : 검색된 파일 또는 디렉토리 삭제.
• -exec : 검색된 파일에 대해 지정된 명령 실행.
• -path : 지정된 문자열 패턴에 해당하는 경로에서 검색.
• -print : 검색 결과를 출력. 검색 항목은 newline으로 구분. (기본 값)
• -print0 : 검색 결과를 출력. 검색 항목은 null로 구분.
• -size : 파일 크기를 사용하여 파일 검색.
• -type : 지정된 파일 타입에 해당하는 파일 검색.
• -mindepth : 검색을 시작할 하위 디렉토리 최소 깊이 지정.
• -maxdepth : 검색할 하위 디렉토리의 최대 깊이 지정.
• -atime : 파일 접근(access) 시각을 기준으로 파일 검색.
• -ctime : 파일 내용 및 속성 변경(change) 시각을 기준으로 파일 검색.
• -mtime : 파일의 데이터 수정(modify) 시각을 기준으로 파일 검색.
예 ) 현재 디렉토리에서 abc가 들어가는 파일과 디렉터리 모두 출력
$ find . -name '*abc*' -type d
예 ) /opt 디렉터리에 있는 .c로 끝나는 파일을 10개만 먼저 출력
$ find /opt '*.c' | head -10
예 ) 현제 디렉토리에서 수정한지 10일 이상된 파일만 뽑아서 자세히 출력
$ find . -mtime +10 -type f -ls
예 ) 오래된 로그를 자동으로 정리해줄 때 잘 사용되는 명령어
- 현재 디렉토리에서 수정한지 10일이 지난 오래된 tar파일들만 골라서 삭제
$ find . -name "*.tar" -mtime +10 -delete
예 ) 파일 크기가 200KB 이상되는 파일만 출력
$ find . -size +300kCopy
[ 6 ] more : 파일 내용 페이지 단위로 출력
◆ 리눅스에서 파일 내용을 확인하는 명령어들 중 하나로 파일을 읽어 화면에 화면 단위로 출력하는 명령어 이다.
◆ 스페이스바를 눌러 다음 페이지로 이동할 수 있다.
< 기본 형식 > more [옵션] filename1, filename2, ...
[ 옵션 ]
• -p : 페이지를 이동할 때 화면을 아래로 이어서 출력하지 않고 새로고침 하면서 출력한다.
• -숫자 : 한 페이지를 몇 줄로 설정할 것인지 정한다.
• -s : 여러 줄의 공백이 있는 경우 한 줄의 공백으로 줄여 표시한다.
• -d : 한 페이지가 끝나면 --More-- 문구 옆에 [Press space to continue, q to quit] 문구를 표시한다.
**< more 실행 중 명령어 >**
► Space : 다음 페이지로 이동
► 숫자 + z : 숫자줄 만큼 다음으로 이동
► q 또는Q : more 명령어 종료
► f : 다음 페이지로 이동
► b : 이전 페이지로 이동
► = : 현재 줄 번호 표시
► v : vi 에디터로 실행
** < more 실행 중 문자열 검색 > **
► /표현식 : 표현식에 해당하는 문자열을 찾는다.
► n : 다음으로 발견되는 문자열을 찾는다.
► ' : 이전 발견되는 문자열을 찾는다.
예 ) 5줄씩 보여 주고, more 명령어 에서 빠져나오는 방법은 q 또는 Q를 입력하면 됩니다.
$ more -5 text.txt
[ 7 ] less : 파일 내용 페이지 단위로 출력
◆ more보다 더 많은 기능을 제공하는 텍스트 파일 페이지 출력 명령어 이다.
◆ less의 가장 큰 장점은 양방향 스크롤이 가능하다.
- 위아래로 파일을 자유롭게 탐색할 수 있다.
< 기본 형식 > less [옵션] filename
[ 옵션 ]
• -N : 줄 번호를 출력한다.
** < less 실행 중 문자열 검색 > **
► Space : 줄 번호를 출력한다.
► f : 다음 페이지로 표시한다.
► Enter : 행 단위로 표시한다.
► /[String] : 표시되는 파일에 내용 기준 이후에 내용의 문자열을 찾는다.
► ?[String] : 표시되는 파일에 내용 기준 이전에 내용의 문자열을 찾는다.
► q : less 명령어를 종료다.
예 ) 확인하고자 하는 파일의 내용이 너무 길 경우 한 화면에 다 출력할 수 없으므로 파이프(|)를 이용해서 less 명령어를 사용한다.
$ cat sample.txt | less
$ less sample.txt
[ 8 ] grep: 파일 내에서 특정 문자열 검색 (Global Regular Expression Print)
◆ grep명령어는 파일 내의 특정 문자열을 찾을 때 사용하는 명령어다.
◆ 단순히 문자만 찾는 명령어가 옵션에 따라 문자열을 포함하거나 비포함, 라인수 등 여러 가지 방법으로 조회할 수 있다.
< 기본 형식 > grep [옵션] "문자열" [파일명]
[ 옵션 ]
▪ -i : 대소문자를 구분하지 않는다
▪ -n : 줄의 번호와 내용을 같이 검색
▪ -m : 최대 출력 수 제한
▪ -v : 문자가 포함되지 않는 행 검색
▪ -w : 단어 단위로 문자열 검색
▪ -H : 검색 결과 앞에 파일 이름 표시하여 검색
▪ -r : 하위 디렉토리를 포함한 모든 파일에서 문자 검색
예 ) grep -i "문자열" [파일 명]
$ grep -i "error" app_2023_04_03.log
예 ) grep -n "문자열" [파일 명]
$ grep -n "error" app_2023_04_03.log ---> "error"문자열이 포함된 라인 번호 출력.
예 ) grep -m [라인수] "문자열" [파일 명]
$ grep -m 50 "error" app_2023_04_03.log ---> "error"문자열이 포함된 결과 50개까지 출력.
예 ) grep -v "문자열" [파일 명]
$ grep -v "error" app_2023_04_02.log ---> "error"문자열이 포함되지 않은 라인 출력.
예 ) grep -w "문자열" [파일 명]
$ grep -w "error" app_2023_04_02.log ----> "error"문자열(단어 단위) 포함된 라인 출력.
예 ) grep -H "문자열" *
$ grep -H "error" * ----> "error"문자열이 포함된 파일 이름 표시.
예 ) grep -r "문자열" *
$ grep -r "error" * ----> 하위 디렉토리에 있는 파일까지 포함하여 모든 파일에서 "error"문자열 검색
$ grep "error" * -----> 현재 디렉토리에 있는 모든 파일 중 "error"문자열 검색
grep "문자열1\|문자열2" [파일명] ----> 여러 문자열을 한번에 검색
grep "문자열1" [파일명] | grep "문자열2" | grep "문자열3" ---> 여러 문자열을 한번에 검색
grep "문자열" [파일명] >> [저장할 파일명] ---> *원하는 내용을 출력하여 파일로 재가공*
grep "^문자열" [파일명] ----> 문자열로 행이 시작되는 경우 검색
grep "^[he]" [파일명] ----> h나 e로 시작하는 모든 행 검색
grep "문자열&" [파일명] ----> 문자열로 행이 끝나는 경우 검색
grep "h*" [파일명] ----> "h"로 시작하는 모든 로우 검색
grep -A2 "문자열" [파일명] ---> 해당 문자열이 들어강 행을 포함해 아래 2행 검색
grep -v "문자열" [파일명] ----> 해당 문자를 제외한 행 검색
grep "문자열" * ---> 현재 위치의 모든파일 (*)에서 특정 문자열 검색
grep [a-c] [파일명] ----> a,b,c로 시작하는 로우를 검색
grep "h...e" [파일명] ----> h로 시작하고 e로 끝나는 단어 검색
[ 9 ] wc : 파일 내 단어, 줄, 문자 수 세기 (Word Count)
◆ Word Count의 약자로 사용자가 지정한 파일에 행이나 단어 또는 문자수를 출력해 주는 명령어 이다.
- 파일의 대략적인 양, 파일을 비교할 때, 특정 명령어의 결과에 대한 라인 수
< 기본 형식 > wc [옵션] [파일]
[ 옵션 ]
▪ -c --bytes 지정한 파일의 바이트(byte) 수를 출력한다.
▪ -m --chars 지정한 파일의 문자(char) 수를 출력한다.
▪ -l --lines 지정한 파일의 행(Line) 수를 출력한다.
▪ - --files0-from=F NUL로 끝나는 파일에 대해 입력값을 받아 정보를 출력한다.
▪ -L --max-line-length 지정한 파일 중 가장 긴 라인의 문자 수를 출력한다.
▪ -w --words 지정한 파일의 단어(word) 수를 출력한다.
▪ - --help wc 명령어의 사용법을 출력한다.
▪ - --version wc 명령어의 버전을 출력한다.
► 파일을 입력하지 않거나 파일이 '-' 기호로 입력되면 표준 입력을 읽는다.
► 입력 후 ctrl+d를 눌러 종료하면 행(Line), 단어(word), 행(Line)+문자수(Char)가 출력된다.
예 )
$ cat -n file1.txt
1 Hello, my name is Song
2 How ary you?
3 Nice to meet you
4 I like apple
5 They should keep their prom
$ wc -m file1.txt
97 file1.txt
$ wc -l file1.txt
5 file1.txt
[ 10 ] sort: 파일 내용 정렬
◆ 파일 내용을 줄 단위로 오름차순 정렬한다.
- 기본적으로 각 줄의 첫 번째 필드를 기준으로 한다.
< 기본 형식 > sort [-옵션] 파일*
[ 옵션 ]
▪ -b : 앞에 붙는 공백을 무시한다.
▪ -c : 이미 정렬된 상태인지 확인한다.
▪ -d : 숫자, 문자, 공백만 비교해 사전식으로 정렬한다.
▪ -f : 대소문자 구분 없이 정렬한다.
▪ -n : 숫자 문자열의 숫자 값에 따라 정렬한다.(1, 2, 3...)
▪ -r : 역순(내림차순)으로 정렬한다.
▪ -t 문자 : 지정된 문자를 필드 구분자로 사용한다.
▪ -o : 정렬된 내용을 지정된 파일에 저장한다.
** < 정렬 필드 지정 방법 > **
► -k 필드번호 : 필드번호를 1부터 센다.
► +시작필드 -종료필드 : 필드번호를 0부터 세며, (시작필드 ~ 종료필드 - 1) 을 기준으로 정렬한다.
예) 둘 다 동일한 명령
$ sort -k 3 textfile.txt
$ sort +2 -3 textfile.txt
예 ) textfile.txt을 정렬해 sort.txt에 저장
$ sort -o sort.txt textfile.txt
예 ) ':'을 필드 구분자로 사용하며 3번째 필드 기준으로 정렬
$ sort -t: -k 3 -n /etc/passw
[ 11 ] head : 파일 상위 일부 출력
◆ 파일의 전체 내용 중 앞부분을 출력해 주는 명령어이다.
◆ 텍스트 파일로 된 파일의 전체 내용 중 앞부분을 출력해주며 binary로 된 파일은 출력은 되지만
알아볼 수 없는 문자로 출력해 주기 때문에 텍스트 파일로 된 파일 출력을 권장한다.
◆ 주로 대용량의 로그 파일이나 줄 수가 많은 파일 또는 어떤 파일인지 확인하려고 할 때 사용한다.
< 기본 형식 > head [옵션] [파일]
[ 옵션 ] 옵션을 사용하면 파일의 행수나 용량을 지정할 수 있어 사용자가 원하는 만큼 출력을 지정할 수 있다.
• -숫자 : 출력을 원하는 줄 수를 지정. 디폴트 값은 10이며, 10일 경우 첫 번째 줄 부터 열 번째 줄까지 출력 된다.
• -c : 출력을 원하는 용량(SIZE)를 지정. 사이즈를 지정할 때는 b(block=512bytes), k(kilobytes), m(megabytes)와
같이 단위를 지정하며 단위를 지정하지 않을 경우에는 바이트 단위로 출력 된다.
• -n : 출력을 원하는 줄 수를 지정
• -q : 출력할 때 파일명을 출력 안 함
• -v : 출력하는 파일명을 출력
예 ) file1.txt , file2.txt , file3.txt , file4.txt 파일에는 모두 동일하게 a부터 z까지 각 5글자 씩 총 26줄이 존재한다.
$ head file1.txt <--- 아무런 옵션을 사용하지 않으면 기본적으로 처음부터 10줄을 표준 출력으로 출력한다.
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
hhhhh
iiiii
jjjjj
$ head file1.txt file2.txt file3.txt file4.txt
==> file1.txt <==
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
hhhhh
iiiii
jjjjj
==> file2.txt <==
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
hhhhh
iiiii
jjjjj
==> file3.txt <==
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
hhhhh
iiiii
jjjjj
==> file4.txt <==
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
hhhhh
iiiii
jjjjj
예 ) head 명령어로 표준 입력을 받아 파일을 생성할 수 있다.
$ head > testfile.txt
Hi. My name is kilsung
Nice to meet you
bye bye
[ 12 ] tail : 파일 하위 일부 출력
◆ tail 명령어는 파일의 마지막 행을 기준으로 지정한 행까지의 파일 내용 일부를 출력해주는 명령어이다.
◆ 기본값으로는 마지막 10줄을 출력하며 주로 tail은 리눅스에서 오류나 파일 로그를 실시간으로 확인할 때 매우 유용하게 사용된다.
< 기본 형식 > tail [옵션] [파일명]
[ 옵션 ]
▪ -f : tail을 종료하지 않고 파일의 업데이트 내용을 실시간으로 계속 출력한다.
▪ -n (라인 수) : 파일의 마지막줄부터 지정한 라인수까지의 내용을 출력한다.
▪ -c (바이트 수) : 파일의 마지막부터 지정한 바이트만큼의 내용을 출력한다.
▪ -q : 파일의 헤더와 상단의 파일 이름을 출력하지 않고 내용만 출력한다.
▪ -v : 출력하기전에 파일의 헤더와 이름 먼저 출력한 후 파일의 내용을 출력한다.
예 ) -n [숫자] : 마지막 10 줄을 출력
$ tail -n 10 example.txt
예 ) -f : access.log 파일의 실시간으로 출력
$ tail -f access.log
예 ) -c [바이트] : example.txt 파일 마지막 100바이트를 출력
$ tail -c 100 example.txt
예 ) -q : 파일명을 출력하지 않음 (여러 파일 처리 시 유용함)
$ tail -q example1.txt example2.txt ...
예 ) -v : 파일명을 항상 출력 (여러 파일 처리시 유용함)
$ tail -v example1.txt example2.txt ...
예 ) -s : [초] 출력 사이에 지연 시간을 설정 (-f 옵션과 같이 사용하면 유용)
$ tail -f -s 1 example.txt
예 ) -r : 파일의 내용을 역순으로 출력
$ tail -r example.txt
예 ) --pid=[PID] : 지정된 PID가 종료될 때까지 파일의 끝 부분을 출력
$ tail --pid=40745 example.txt
예 ) -z : 끝나는 줄 구분을 줄바꿈이 아닌 NUL로 구분 (아카이브 파일 확인 시 유용)
$ tail -z example.txt
[ 13 ] sed : 텍스트 편집 및 치환 (Stream Editor)
◆ 문자열/파일을 수정(치환, 삭제, 삽입 ….)하여 출력해주는 기능을 제공한다.
◆ 대화식 처리가 아닌, 명령행에서 직접 편집을 수행한다.
◆ 원본 파일은 변경되지 않는다.
◆ 정규 표현식을 사용하여, 편집하려는 행을 검색/선택할 수 있다.
◆ 패턴 검색/선택을 위해서 다수의 메타문자를 사용할 수 있다.
◆ 파일을 한 행(line)씩 읽을 수 있다.
◆ 패턴 스페이스, 홀드 스페이스 두 가지 버퍼를 사용한다.
◆ 패턴 스페이스에는 현재 작업중인 라인을 저장한다.
◆ 여러 라인들을 처리(변환/치환)해야하는 경우, 처리할 라인을 홀드 스페이스에 저장한다.
< 기본 형식 > sed [옵션] '명령어' 파일명
[ 옵션 ]
• -e : 다중 편집을 가능하게 한다.
2개 이상의 패턴을 사용하는 경우에 사용한다.
• -n : 자동 출력을 생략한다.(기본 동작은 문자열/파일의 전체 출력.)
변경한 라인만 출력하고 싶은 경우에 사용한다.
• -p : 행을 출력한다(-n 옵션과 함께 사용할 경우, 선택된 행만 출력한다.)
• -d : 선택한 행을 삭제한다.
• -f : 파일 안의 내용을 실행한다.
• 's/가/나/g' : '가' 문자열을 '나' 문자열로 대체한다.
• -q : sed를 종료한다.
예 ) 패턴에 해당하는 부분만 보려면 –n 옵션으로 사용한다.
$ sed -n '/011/p' data
예 ) 1번 라인부터 3번 라인까지 삭제하고 출력.
$ sed '1,3d' data
예 ) 4q는 4라인까지 출력한 후 종료하라는 의미이다.
$ sed '4q' data Å q 옵션은 종료 옵션이다.
***< sed 정규식/메타문자 정리 >***
정규식(메타문자) 기능 사용 예 사용 예 설명
^ 행의 시작 지시자 /^love/ love로 시작하는 문자 검색.
$ 행의 끝 지시자 /love$/ l ove로 끝는 문자 검색.
. 하나의 문자와 대응 /l…e/ l 다음의 두 문자 후 e로 끝나는 문자 검색.
* 선행 문자와 같은 문자의 0개 /*love/ 0개 혹은 여러 개의 공백후 love로 끝나는 문자 검색.
혹은 임의 개수와 대응
[ ] [ ]사이의 문자 집합중 하나와 대응 /[Ll]ove/ love나 Love를 포함하는 문자 검색.
[^] 문자 집합에 속하지 않는 /[^A-KM-Z]ove/ A~K, M~Z범위에 포함되지 않는 문자 이후 ove로 끝남
한 문자와 대응
\(..\) 문자열을 저장 s/\(lov\)able/\1er/ 지정된 부분을 태크1에 저장함. loveable을 검색 후 lover로 저장.
& 검색열을 저장하여 치환열에서 . s/love/**&**/ 문자열 love가 &와 치환됨
사용할수 있게 함
\< 단어의 시작 지시자 /\<love/ love로 시작하는 단어를 포함하는 행을 검색.
\> 단의 끝 지시자 /love\>/ love로 끝나는 단어를 포함하는 행을 검색.
x\{m\} 문자 x를 m번 반복 /o{5\}/ 문자 o를 5번 반복 검색.
x\{m,\} 문자 x를 최소 m번 반복 /o{5,\}/ 문자 o를 최소 5번 반복 검색.
x\{m,n\} 문자 x를 m~n회 반복 /o{5,10}/ 문자 o를 5~10번 반복 검색.
*** < sed 플래그/커맨드.>***
▪ a\ : 현재 행에 하나 이상의 새로운 행을 추가한다.
▪ c\ : 현재 행의 내용을 새로운 내용으로 교체한다.
▪ i\ : 현재 행의 위에 텍스트를 삽입한다.
▪ h : 패턴 스페이스의 내용을 홀드 스페이스에 복사한다.
▪ H : 패턴 스페이스의 내용을 홀드 스페이스에 추가한다.
▪ g : 홀드 스페이스의 내용을 패턴 스페이스에 복사한다.
▪ G : 홀드 스페이스의 내용을 패턴 스페이스에 추가한다.
▪ l : 출력되지 않는 특수문자를 명확하게 출력한다.
▪ n : 다음 입력 행을 첫 번째 명령어가 아닌 다음 명령어에서 처리하게 한다.
▪ ! : 선택된 행을 제외한 나머지 전체 행에 명령어를 적용한다.
▪ r : 파일을 읽어온다.
▪ d : 행을 삭제한다.
▪ p : 행을 출력한다.(전체 데이터 출력.)
▪ s : 문자열을 치환한다.
***< sed 치환 플래그 >***
▪ g : 문자열/파일내에 모든 패턴들을 검색하고 전체에 대해 치환한다.
▪ i : 대소문자를 무시하고 실행한다.
▪ p : 치환된 행만을 출력한다.
▪ w : 파일에 쓴다.
▪ x : 홀드 버퍼와 패턴 스페이스의 내용을 서로 맞바꾼다.
▪ y : 한 문자를 다른 문자로 변환한다
[ 14 ] awk : 텍스트 처리 및 보고서 생성
◆ AWK (Aho Weinberger Kernighan)는 텍스트가 저장되어 있는 파일을 원하는 대로 필터링하거나 추가해주거나 기타 가공을 통해서
나온 결과를 행과 열로 출력해주는 프로그램 이다.
◆ awk 명령은 이름에 그 기능을 의미하는 단어나 약어가 포함되어 있지 않다.
▶ awk는 최초에 awk 기능을 디자인한 사람들의 이니셜을 조합하여 만든 이름이기 때문이다.
▶ Aho + Weinberger + Kernighan. (A:Alfred V. Aho, W:Peter J. Weinberger, K:Brian W. Kernighan)
◆ awk는 파일로부터 레코드(record)를 선택하고, 선택된 레코드에 포함된 값을 조작하거나 데이터화하는 것을 목적으로
사용하는 프로그램입니다.
▶ awk 명령의 입력으로 지정된 파일로부터 데이터를 분류한 다음, 분류된 텍스트 데이터를 바탕으로 패턴 매칭 여부를 검사하거나
데이터 조작 및 연산 등의 액션을 수행하고, 그 결과를 출력하는 기능을 수행합니다.
◆ awk는 "awk programming language"라는 프로그래밍 언어로 작성된 프로그램을 실행 하는 명령어이다.
▶ 리눅스에서 쉘 스크립트(Shell Script)로 작성된 파일이 리눅스 쉘(Shell)에 의해 실행되는 것처럼,
awk가 "awk programming language" 문법으로 작성된 코드를 이해하고 실행 한다는 의미로 보면 된다.
< 기본 형식 > awk [옵션] 'pattern { action }' [파일|변수값]
[ 옵션 ]
▪ -u : 버퍼를 사용하지 않고 출력한다.
▪ -F : 확장된 정규 표현식으로 필드구분자를 지정한다, 다중 필드 구분자 사용 가능하다.
▪ awk -F : 단일로 사용시 ':' 를 필드 구분자로 사용
▪ awk -F'[ :\t]' : 다중 필드 구분자 ':'와 tab을 필드 구분자로 사용
▪ -v : 스크립트를 실행하기 전에 미리 변수를 지정하여 준다.
▪ -f : awk 명령 스크립트를 파일에서 읽어온다.
**< 패턴(pattern) 과 액션(action) >**
► awk는 파일 또는 파이프를 통해 입력 라인을 얻어와 $0라는 내부 변수에 라인을 입력한다.
► 각 라인은 레코드라고 부르고, newline(개행)에 의해 구분되다.
► 패턴이 없으면 전체 라인을 얻어오고, 원하는 라인만 얻어오고 싶을때는 패턴을 사용해 분별할 수 있다.
► awk를 실행할때 내장 변수인 FS라고 부르는 필드 분리자가 공백을 할당 받는다.
(필드 분리 기준을 공백이 아닌 다른 값으로 바꿀수도 있다)
► awk는 라인을 공백을 기준으로 각각의 필드나 단어로 나눈다.
► 필드는 $1부터 시작해서 많게는 $100 이상의 변수에 저장할 수 있다.
► 각 필드 데이터들을 저장했다면 awk는 액션을 통해 동작 스크립팅을 할 수 있다.
예 ) 필드들을 화면에 출력할 때 print 함수를 사용하면 된다.
$ awk -F":" '/linux/ {print $1}' test.txxt
► -F : 필드 구분 문자를 공백 말고 ":" 로 설정
► pattern /linux/ : linux 문자열을 포함한 모든 레코드 출력
► action {print $1} : 각 행(레코드)에서 첫번째 필드를 출력
[ 15 ] echo : 문자열 출력
◆ C 언어의 printf 함수에 준하는 화면 출력을 담당하는 명령어이다.
◆ 유닉스 및 유닉스 계열(리눅스) 운영체제에서 지정한 문자열 또는 텍스트를 터미널에 출력하는 명령어이다.
◆ 일반적으로 터미널 프롬프트 명령이나 쉘 스크립트, 배치파일에서 화면이나 파일로 상황을 알리는 문자열을 출력할 때 사용한다.
◆ 문자열과 함께 개행 문자를 덧붙여서 출력이 가능하다.
◆ 쉘 스크립트의 변수나 터미널의 환경 변수나 변수를 확인할 경우 주로 사용한다.
◆ echo명령어는 리눅스에서 출력 명령어로 자주 쓰는 명령어이다
< 기본 형식 > echo [옵션] [텍스트 및 문자열]
▷ 옵션 없이 사용할 수 있고, 다양한 옵션과 이스케이프 문자의 옵션을 이용하여 여러 가지 방식으로 출력을 표현할 수 있다.
예 )
$ echo $0
$ echo $SHELL
$ echo $(( ( 3 + 1 ) * 4 ) ))
예 ) 버에 PATH 경로 확인
$ echo $PATH
예 ) 리다이렉션 을 이용한 파일 저장 및 계정에 암호 설정 등에 사용 될 경우
$ echo " What's your name ?" > newTextFile.txt
예 ) root의 패스워드를 변경 - 파이프 와 stdin 를 통해 roo 패스워드 를 변경 가능 하다.
$ echo "123456" | passwd --stdin "root"
[ 16 ] clear - 터미널 화면 지우기
◆ 리눅스 명령어 clear는 터미널의 내용을 모두 지우는 명령어로 도스의 cls명령어와 같은 동작을 한다.
◆ 옵션도 없는 단순 명렬이다.
예 )
$ clear