cut - 10주차 수업 - 1
cut
파일의 각 줄에서 특정 섹션을 잘라내서 출력하는 기능이다.
cut -b LIST [파일명] byte단위로 자를 수 있다.
cut -c LIST [파일명] charactor단위로 자를 수 있다.
cut -f LIST [-d 구분자] [-s] [파일명] fileld, 구분자로 구별되어 있는 항목
- -b LIST LIST에 지정된 바이트를 잘라서 출력
- -c LIST LIST에 지정된 문자를 잘라서 출력
- -f LIST LIST에 지정된 필드를 잘라서 출력
- -d 구분자(delimiter)지정
- -s 구분자가 없는 행은 통과
tr
입력 데이터에서 특정 문자들을 교체 또는 제거하는 변환
tr SET1 SET2
SET1 문자집합에서 SET2 문자집합으로 변환
$ echo "b is a cd" | tr 'abcd' 'jkmn'
k is j mn
tr -s SET1
반복되는 문자를 한 개의 문자로 압축
$ echo "bb is a bbb" | tr -s 'b'
b is a b
tr -d SET1
문자 제거
$ echo "bkk is a kb" | tr -d 'k'
b is a b
sed(stream editor)
sed [option] {script} [FILE]
입력 스트림에 대한 텍스트 변환
%cat testfile
abc 123
kkk 777
abc 123
% sed '2d' testfile
abc 123
abc 123
% sed 's/bc/BC/' testfile
aBC 123
kkk 777
aBC 123
pr
paginating, 파일을 페이지 단위로 인쇄할 수 있게 출력
파일 비교
- cmp - 두 개의 파일을 바이트 단위로 비교
- diff - 파일을 줄 단위로 비교
- comm - 두 개의 정렬된 파일을 줄 단위로 비교
paste
파일 병합(컬럼으로)
실습1
cslinux2 사용자(계정) 중에서 다음 정보를 추출하여 출력하기 위한 명령을 구성하시오.(/etc/passwd 파일 활용)
1. 전체 사용자의 로그인 id
cat /etc/passwd | cut -f1 -d:
2. 23학번 학생의 로그인 id
cat /etc/passwd | grep '^2023' | cut -f1 -d:
3. 23학번 학생의 uid
cat /etc/passwd | grep '^2023' | cut -f3 -d:
로그인되어 있는 사용자 목록(who 출력)에서 로그인id 부분만 추출하여 출력하시오.
who | cut -f1 -d' '
실습2
sam 파일 내용 출력
cat sam
Apple+Banana*mango
Cherry strawberry --blueberry
1. +와*문자를 각각(와)로 변환하여 출력
cat sam | tr '+ *' '( )'
Apple(Banana)mango
Cherry strawberry --blueberry
2. - 문자를 제거하여 출력
cat sam | tr -d '-'
Apple+Banana*mango
Cherry strawberry blueberry
3. 여러 개의 공백이 연달아 있는 경우 한 개의 공백으로 합친 후 출력
cat sam | tr -s ' '
Apple+Banana*mango
Cherry strawberry --blueberry
who 출력에 대해 다음 사항 출력(tr, cut 함께 사용)
1. 로그인 날짜와 시각만 출력
who | tr -s ' ' | cut -f3,4 -d' ' | tr'-' '/'
2. 1번 출력에서 날짜의 -를 /로 변경하여 출력
who | tr -s ' ' | cut -f3,4 -d' '| tr '-' '/'
실습3
sam 파일 출력
cat sam
appLE 35
banana 1
mango 21
appLE 5
mango 15
appLE 18
1. appLE을 모두 apple로 치환하여 출력
cat sam | sed 's/LE/le/'
apple 35
banana 1
mango 21
apple 5
mango 15
apple 18
who 출력에 대해 다음 사항 출력
1. 자신의 로그인 id를 문자열 'ME'로 바꾸어 출력
who | grep -w '202121165' | sed 's/202121165/ME/'
ME pts/597 2023-05-29 21:17 (112.148.136.34)
2. 로그인 시각을 모두 *:*로 바꾸어 출력(정규표현식 활용)
who | sed 's/[0-9]*\:[0-9]*/*:*/'
jhkim pts/303 2023-03-25 *:* (tmux(615069).%0)
202312345 pts/586 2023-05-23 *:* (tmux(3589159).%0)
202321027 pts/596 2023-05-29 *:* (210.222.216.228)
202121165 pts/597 2023-05-29 *:* (112.148.136.34)
202320965 pts/598 2023-05-29 *:* (211.183.234.36)
202320998 pts/600 2023-05-29 *:* (112.216.247.247)
201920868 pts/644 2023-05-29 *:* (125.241.164.18)
202312345 pts/647 2023-05-24 *:* (218.151.110.25)
nobody pts/290 2023-05-29 *:* (222.116.135.162)
3. ip주소를 모두 *.*.*.*로 바꾸어 출력(정규표현식 활용)
who | sed 's/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/*.*.*.*/'
202321027 pts/596 2023-05-29 23:56 (*.*.*.*)
202121165 pts/597 2023-05-29 21:17 (*.*.*.*)
202320965 pts/598 2023-05-29 23:44 (*.*.*.*)
202320998 pts/600 2023-05-29 19:29 (*.*.*.*)
201920868 pts/644 2023-05-29 21:31 (*.*.*.*)
202312345 pts/647 2023-05-24 11:29 (*.*.*.*)
nobody pts/290 2023-05-29 14:02 (*.*.*.*)
실습4
sam1 , sam2 파일 출력
apple
banana
cherry
mango
strawberry
banana
chery
mango
strawberry
blueberry
1. diff 명령을 통해 두 개의 파일의 차이 출력
diff sam1 sam2
1d0
< apple // sam1의 1번째 행이 sam2의 0번째 행과 다르다. sam1에만 apple가 있다.
3c2
< cherry // sam1의 3번째 행이 sam2의 2번째 행과 다르다. sam1 cherry -> sam2 chery로 되어있다.
---
> chery
5a5
> blueberry // sam1의 5번째 행이 sam2의 5번째 행과 다르다. sam1 strawberry -> blueberry로 되어있다.
2. paste명령을 이용해 두 개의 파일을 병합한 후 출력
apple banana
banana chery
cherry mango
mango strawberry
strawberry blueberry
last명령 출력에 대해 다음 사항 수행
1. last 명령 수행 결과를 파일 aa로 저장, 잠시 후 다시 last 명령 수행 결과를 파일 bb로 저장한 후 두 개의 파일 차이를 비교
last > aa; last > bb ; diff aa bb
아무런 출력이 없는데 aa와 bb 파일이 동일하다는 뜻이다. ls -l로 해도 179934로 파일이 동일하다.
2. 로그인 id를 모두 잘라내어 loginid라는 이름의 파일로 저장
last | cut -f1 -d ' ' > loginid
3. 요일 부분을 잘라내어 wday라는 이름의 파일로 저장
last | tr -s ' ' | cut -f4 -d ' ' > wday
4. loginid과 wday파일을 병합하여 출력
paste loginid wday | head
20212116 Tue
20232102 Mon
20232096 Mon
20232099 Mon
20232101 Mon
20232099 Mon
20212120 Mon
20232096 Mon
20232098 Mon
20232099 Mon