[네이버클라우드캠프] - 8일차 (정규표현식, sed, awk)

holy one·2023년 5월 4일
0

정규표현식

연산자의미
.1문자 일치
?존재하는 문자가 있을 수도, 없을 수도 있음
*0번 혹은 그 이상 반복
^시작과 일치 [^abc]때는 부정
$끝과 일치
+1번 이상 반복
[][]사이 존재하는 문자들 중 하나
[A-Z]범위, 대문자 전체
{n}정확히 n번 일치
{n,m}적어도 n번 m번을 넘지 않음, n~m 사이
{n,}n번 또는 그 이상
\b단어 끝의 공백 문자열
\B끝이 아닌 곳에서 공백 문자열
\<시작 단어 문자열
>단어 끝에서 문자열
파싱문자열을 의미 있는 토근으로 분리하고 이를 파스트리로 만듬

sed

  • 비대화형 편집기로 grep과 비슷, ed에서 옴

sed [옵션][파일]

  • 옵션
  1. 숫자 : 몇 번쨰로 나타나는 패턴을 새롭게 바꿀지 결정
  2. g : global
  3. p : print 원본이 출력되어야 한다.
  4. d : delete 삭제
  5. s : substitute 치환
  6. w file명 : 바꾼 결과를 새롭게 저장
변경 하기
sed 's/ace/ACE/g' /etc/passwd
sed 's/ace/ACE/gw /yes' /etc/passwd 	- 변경된 라인만 저장 저장

삭제하기
sed '/^$/d' /etc/services | cat -n  	- 빈줄 삭제 (^$ = 빈줄)
root@kwc
17:37:07:~# sed -n '/root/p' u
root:x:0:0:root:/root:/bin/bash

root@kwc
17:37:18:~# sed '/root/!d' u		- 같은 의미
root:x:0:0:root:/root:/bin/bash

awk

  • gawk의 심볼리 링크, 데이터를 조작하고 리포트를 생성하기 위해 사용

awk '패턴{action}' "파일명"

  • 내장변수
cp /etc/passwd aa

root@kwc
16:34:21:~# awk -F: '{print $1, $3}' aa | tail -5				- /etc/passwd에서 첫번쨰 필트 세번쨰 필트 구분하여 모두 출력
usbmux 113
j 1000
lxd 999
mysql 114
tomcat 998

root@kwc
16:34:26:~# awk -F: '{print $1, $6}' aa | tail -5
	- /etc/passwd에서 첫번쨰 필트 여섯번쨰 필트 구분하여 모두 출력
usbmux /var/lib/usbmux
j /home/j
lxd /var/snap/lxd/common/lxd
mysql /nonexistent
tomcat /var/lib/tomcat
  • sqlite와 awk로 데이터 출력하기
root@kwc
16:35:55:~# cat > k1
손흥민
이 강인
김덕배
송살라
이아자르
root@kwc
16:36:30:~#
root@kwc
16:36:31:~# cat > k2
100
200
300
400
500
root@kwc
16:36:49:~# cat > k3
20
23
35
56
88

root@kwc
16:37:19:~# nl k1
     1  손흥민
     2  이강인
     3  김덕배
     4  송살라
     5  이아자르

root@kwc
16:37:21:~# nl k2
     1  100
     2  200
     3  300
     4  400
     5  500

root@kwc
16:37:26:~# nl k3
     1  20
     2  23
     3  35
     4  56
     5  88



root@kwc
16:41:20:~# awk -F' ' '{print $1, '\n',$2, '\t'  $3}' kk
손흥민  100 20
이강인  200 23
김덕배  300 35
송살라  400 56
이아자르  500 88


root@kwc
16:42:11:~# sqlite3
SQLite version 3.37.2 2022-01-06 13:25:41
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> create table yy(name, asset, age);
sqlite> .import kk yy
sqlite> .head on
sqlite> .mode col
sqlite> SELECT * FROM yy;
name  asset  age
----  -----  ---
손흥민   100    20
이강인   200    23
김덕배   300    35
송살라   400    56
이아자르  500    88


root@kwc
16:46:23:~# vi kk
  1 손흥민|100|20
  2 이강인|200|23
  3 김덕배|300|35
  4 송살라|400|56
  5 이아자르|500| 88
~


root@kwc
17:09:44:~# awk -F'|' '{print $1, $2, $3}' kk
손흥민 100 20
이강인 200 23
김덕배 300 35
송살라 400 56
이아자르 500 88


root@kwc
17:10:50:~# awk -F'|' '$2 > 300' kk			- '|'로 구별하며 두번쨰 필드가 300 이상 모두 출력
송살라|400|56
이아자르|500|88
root@kwc
17:14:02:~# df
Filesystem     1K-blocks    Used Available Use% Mounted on
tmpfs             202324    1160    201164   1% /run
/dev/sda4       12278920 4805680   6827712  42% /
tmpfs            1011600       0   1011600   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
/dev/sda2         996780  132944    795024  15% /boot
/dev/sda5        5074592      48   4796016   1% /home
/dev/sda6       10215700      24   9675160   1% /data
tmpfs             202320       4    202316   1% /run/user/1000
tmpfs             202320       4    202316   1% /run/user/0

root@kwc
17:14:19:~# \df | awk '$4 > 800000'			- 파일 디스트 용량중 가용량이 80000이상 출력
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda4       12278920 4805680   6827712  42% /
tmpfs            1011600       0   1011600   0% /dev/shm
/dev/sda5        5074592      48   4796016   1% /home
/dev/sda6       10215700      24   9675160   1% /data

root@kwc
17:15:37:~# find / -size +100M 2>/dev/null
/boot/initrd.img-5.15.0-71-generic
/proc/kcore								- proc : process
/usr/lib/x86_64-linux-gnu/libLLVM-15.so.1
/usr/lib/jvm/java-11-openjdk-amd64/lib/modules
/usr/lib/jvm/java-11-openjdk-amd64/jmods/java.base.jmod
/var/lib/snapd/seed/snaps/lxd_24322.snap
/var/lib/snapd/snaps/lxd_24322.snap
/var/cache/apt/archives/openjdk-11-jdk-headless_11.0.18+10-0ubuntu1~22.04_amd64.deb
profile
☁️ 좋아요!

0개의 댓글