리λ μ€ ν μ€νΈ μ²λ¦¬ awk sed νμ©λ²μ ν λ²μ μ 리ν μ€λ¬΄ κ°μ΄λ. λ‘κ·Έ λΆμ, μ€μ νμΌ μλ μΉν, CSV μ§κ³ λ± κ°λ°·μ΄μ νκ²½μμ λ°λ‘ μ μ©ν μ μλ ν΅μ¬ ν¨ν΄μ μμ λ‘ μ€λͺ ν©λλ€.
1. 리λ μ€ ν μ€νΈ μ²λ¦¬μ ν΅μ¬, awkμ sedλ₯Ό μ€λ¬΄ κ΄μ

리λ
μ€μμ μμ€ν
μ κ°λ°νκ±°λ μλ²λ₯Ό μ΄μνλ μ¬λμ΄λΌλ©΄ ν
μ€νΈ νμΌμ λ€λ£¨λ μΌμ νΌν μ μλ€.
νΉν λ‘κ·Έ λΆμ, μ€μ νμΌ μλν, CSV λ°μ΄ν° κ°κ³΅ κ°μ μμ
μ λ§€μΌ λ°λ³΅λλ μ
무μ κ°κΉλ€.
νμ§λ§ λ¬Έμ λ μ΄λ λ€.
- λ§€λ² ν μ€νΈ μλν°λ‘ μ΄μ΄μ νΈμ§νλ©΄ λ리λ€.
- 볡μ‘ν λ‘κ·Έλ ν¨ν΄μ΄ λμ μ μ λ€μ΄μ¨λ€.
- λ°λ³΅ μμ μ μ€μ μνμ΄ λλ€.
κ·Έλμ νμ
μμ§λμ΄λ€μ΄ κ°μ₯ λ§μ΄ μ¬μ©νλ λκ΅¬κ° λ°λ‘ awk / sedλ€.
μ΄ λ λꡬλ λ¨μν λ¬Έμμ΄ μΉνμ λμ΄μ 쑰건 νν°λ§, μ«μ κ³μ°, μ§κ³, λ°μ΄ν° ν¬λ§·ν
, μλν μ€ν¬λ¦½νΈ μμ±κΉμ§ λͺ¨λ 컀λ²νλ€.
λ°λΌμ μ΄ κΈμμλ λ€μ μμλ‘ μ€λ¬΄μμ λ°λ‘ μ°λ 리λ μ€ ν μ€νΈ μ²λ¦¬ awk sed κΈ°μ μ μ 리νλ€:
- grep / sed / awk μν λΆλ¦¬
- sed κΈ°λ³Έ → νμ₯ ν¨ν΄
- awk κΈ°λ³Έ → μ€λ¬΄ μ§κ³ μ¬λ‘
- λ‘κ·Έ·CSV·μ€μ μλν ν¨ν΄ μ 리
- μ€λ¬΄μκ° κ°μ₯ λ§μ΄ μ°λ μ‘°ν© ν¨ν΄
- FAQ + κ΄λ ¨ ν€μλ
μ΄ κ΅¬μ‘°λ§ μκ³ μμ΄λ λλΆλΆμ λ‘κ·Έ μ²λ¦¬ μμ μ μλΌμ΄λ μμ€μΌλ‘ ν΄κ²°ν μ μλ€.
2. grep / sed / awk μν ν λ²μ ꡬλΆνκΈ°

리λ μ€ ν μ€νΈ μ²λ¦¬μ κΈ°λ³Έμ grep → sed → awk μΈ λꡬλ₯Ό μ νν ꡬλΆνλ κ²μ΄λ€.
μΈ λꡬλ λΉμ·ν΄ 보μ΄μ§λ§ μν μ΄ λͺ νν λ€λ¦ λλ€.
β grep: νμν μ€μ μ°Ύλλ€ (νν°)
grep "ERROR" app.log
- νΉμ ν¨ν΄μ ν¬ν¨ν μ€λ§ μ°Ύλλ€
- μ¦, “λΌμΈ μ ν” λ΄λΉ
β sed: μ€μ λ΄μ©μ λ°κΎΌλ€ (μΉν/μμ /μ½μ )
sed -i 's/debug=1/debug=0/' app.conf
- νΉμ λ¬Έμμ΄μ κ΅μ²΄νκ±°λ μμ
- μ€μ νμΌ μλ λ³ν
- “λΌμΈ νΈμ§” λ΄λΉ
β awk: κ° μ€μ νλ λ¨μλ‘ κ³μ°/μ§κ³
awk '{ cnt[$1]++ } END { for(ip in cnt) print ip, cnt[ip] }'
- 곡백/μ½€λ§/νμΌλ‘ ꡬλΆλ ν μ€νΈλ₯Ό νλ λ¨μλ‘ λΆμ
- ν©κ³, νκ· , κ·Έλ£Ή μ§κ³ λ± μ«μ κ³μ°
- “λ°μ΄ν° λΆμ” λ΄λΉ
π― ν μ€ μμ½
μ€μ κ³ λ₯Ό λ → grep
μ€ λ΄μ©μ λ°κΏ λ → sed
μ€ μμ λ°μ΄ν°λ₯Ό κ³μ°ν λ → awk
μ΄ μ‘°ν©μ΄ 리λ μ€ ν μ€νΈ μ²λ¦¬μ ν΅μ¬μ΄λ€.
3. sed : ν μ€νΈ μ€νΈλ¦Ό νΈμ§κΈ°μ ν΅μ¬ μ 리

sedλ μ
λ ₯ μ€νΈλ¦Όμ ν μ€μ© Pattern Spaceμ μ μ¬ν΄ λͺ
λ Ήμ μ μ©νκ³ ,
κ°κ³΅λ κ²°κ³Όλ₯Ό μΆλ ₯ μ€νΈλ¦ΌμΌλ‘ 보λ΄λ κ΅¬μ‘°λ‘ λμν©λλ€.
κΈ°λ³Έ νν
sed 'λμ' νμΌλͺ
1) sedμ κ°μ₯ κΈ°λ³Έ — μΉν(s)
νΉμ λ¬Έμμ΄ μΉν
sed 's/old/new/' file.txt
ν μ€μμ λͺ¨λ oldλ₯Ό λ체
sed 's/old/new/g'
μ κ·μ μ μ©
μ«μλ‘ μμνλ λ¬Έμμ΄μ XXXλ‘ λ³κ²½:
sed 's/^[0-9]\+/XXX/'
2) μλ³Έ νμΌ μ§μ μμ νκΈ°(-i)
sed -i 's/debug=1/debug=0/' /etc/app.conf
λ°±μ νμΌμ λ¨κΈ°κ³ μΆλ€λ©΄:
sed -i.bak 's/debug=1/debug=0/' /etc/app.conf
3) μ€ μμ (d) — λ²νΈ/ν¨ν΄ κΈ°λ°
λ²νΈλ‘ μμ
sed '5d' file
sed '10,20d' file
ν¨ν΄μΌλ‘ μμ
sed '/ERROR/d'
sed '/^#/d'
sed '/^$/d'
4) νΉμ μ€λ§ μΆλ ₯(p)
sed -n '5p'
sed -n '10,20p'
sed -n '/ERROR/p'
-n μ΅μ μ “κΈ°λ³Έ μΆλ ₯ μ΅μ ” μν .
5) μ€ μ½μ /μΆκ° (i, a)
λΌμΈ μμ μ½μ :
sed '5i μ μ€μ΄ 5λ²μ§Έ μ€ μμ μΆκ°λ©λλ€.'
λΌμΈ μλ μ½μ :
sed '5a μ μ€μ΄ 5λ²μ§Έ μ€ μλμ μΆκ°λ©λλ€.'
νΉμ ν¨ν΄ μλ μ½μ :
sed '/pattern/a ### μ€μ μ€μ μμ ###'
6) μ¬λ¬ μΉνμ λμμ μ€ννκΈ°
sed -e 's/foo/bar/g' -e 's/on/off/g'
λλ μ€ν¬λ¦½νΈ λΈλ‘:
sed '
s/foo/bar/g
s/on/off/g
'
7) μ€λ¬΄ sed ν¨ν΄ λͺ¨μ
μ£Όμ μ κ±°
sed '/^#/d'
λΉ μ€ μ κ±°
sed '/^$/d'
μλ€ κ³΅λ°± μ κ±°
sed 's/^[ \t]*//;s/[ \t]*$//'
KEY=VALUEμμ VALUEλ§ μΆμΆ
echo "KEY=VALUE" | sed 's/^[^=]*=//'
4. awk λ λ‘κ·Έ·CSV λΆμμ μ’ λꡬ

awkλ μ€μ νλ λ¨μλ‘ λλκ³ μ«μ κ³μ°κ³Ό 쑰건 νν°λ§κΉμ§ κ°λ₯ν μμ νλ‘κ·Έλλ° μΈμ΄μ λλ€.
κΈ°λ³Έ λ¬Έλ²
awk '{ λμ }' νμΌ
- $0 : μ 체 μ€
- $1 : 첫 λ²μ§Έ νλ
- $NF : λ§μ§λ§ νλ
- NR : νμ¬ μ€ λ²νΈ
- NF : νλ κ°μ
κΈ°λ³Έ ꡬλΆμ: 곡백(μ€νμ΄μ€/ν)
1) νλ μΆλ ₯
awk '{ print $1, $3 }' file
CSVμμ:
awk -F',' '{ print $1, $3 }'
2) 쑰건 νν°λ§
3μ΄μ΄ 30 μ΄μμΈ μ€λ§:
awk '$3 >= 30'
ERROR ν¬ν¨ν μ€λ§:
awk '$0 ~ /ERROR/'
DEBUG λ―Έν¬ν¨:
awk '$0 !~ /DEBUG/'
3) ν©κ³/νκ· κ΅¬νκΈ° (END λΈλ‘)
ν©κ³:
awk '{ sum += $2 } END { print sum }'
νκ· :
awk '{ sum += $2; cnt++ } END { print sum/cnt }'
4) NR/NF νμ©
νλ κ°μ μΆλ ₯:
awk '{ print NF }'
ν€λ 건λλ°κΈ°:
awk 'NR>1'
5. λ‘κ·Έ·CSV μ€λ¬΄ μμ λͺ¨μ
1) Nginx λ‘κ·Έμμ IPλ³ μμ² μ μ§κ³
awk '{ cnt[$1]++ } END { for(ip in cnt) print cnt[ip], ip }' access.log | sort -nr | head
2) ps κ²°κ³Όμμ CPU μ¬μ©λ₯ μμ 5κ°
ps aux | awk '{ print $3, $11 }' | sort -nr | head -5
3) CSV νΉμ μ»¬λΌ ν©κ³
awk -F',' '{ sum += $3 } END { print sum }'
6. sed vs awk
| κ΅¬λΆ | sed | awk |
| μν | λ¬Έμμ΄ μΉν/μμ /μ½μ | νλ κΈ°λ° λΆμ/κ³μ°/μ§κ³ |
| κΈ°μ€ | μ κ·μ·λ¬Έμμ΄ | μΉΌλΌ(νλ) |
| κ°μ | μ€μ κ° λ³κ²½, λ¬Έμμ΄ μμ | λ‘κ·Έμ§κ³, μ«μ κ³μ°, CSV |
| λμ΄λ | λ¨μ | λ 볡μ‘νμ§λ§ κ°λ ₯ |
κ²°λ‘
- ν μ€νΈ μ체λ₯Ό λ°κΎΈκ³ μΆμΌλ©΄ sed
- ν μ€νΈ λ°μ΄ν°λ₯Ό λΆμνκ³ κ³μ°νλ €λ©΄ awk
μ€λ¬΄μμλ 보ν΅:
grep → sed → awk
μμΌλ‘ νμ΄νλ₯Ό μ‘°ν©νλ€.
7. κ°μ₯ λ§μ΄ μ°λ μ€λ¬΄ μ‘°ν©
1) ERROR λ‘κ·Έμμ μλ¬ μ½λλ³ μΉ΄μ΄νΈ
grep "ERROR" app.log \
| awk '{ cnt[$3]++ } END { for(c in cnt) print c, cnt[c] }'
2) μ€μ νμΌμ νΉμ μ΅μ λ§ μ νν λ³κ²½
sed -i 's/^enable_feature_x=.*/enable_feature_x=1/' app.conf
3) du κ²°κ³Ό μ©λ ν° μ μ λ ¬
du -sh * | sort -hr
8. κΈ°λ³Έ ν¨ν΄λ§ μ΅νλ μ€λ ₯ 70% μμ±
1) sed κΈ°λ³Έ ν¨ν΄ 5κ°
sed 's/old/new/' file
sed 's/old/new/g' file
sed -i 's/old/new/g' file
sed '/^#/d'
sed '/^$/d'
2) awk κΈ°λ³Έ ν¨ν΄ 5κ°
awk '{ print $1, $2 }'
awk -F',' '{ print $1, $3 }'
awk '$3 > 100'
awk '{ sum += $2 } END { print sum }'
awk '{ cnt[$1]++ } END { for(k in cnt) print k, cnt[k] }'
9. FAQ (μμ£Ό λμ€λ μ§λ¬Έ)
Q. sedμ awk μ€μ 무μμ λ¨Όμ λ°°μμΌ νλ?
A. λ¬Έμμ΄ μΉνμ΄ λ§λ€λ©΄ sed → κ·Έλ€μ awk μμκ° μ’λ€.
Q. λ‘κ·Έ λΆμλ§ νλ€λ©΄ awkλ§μΌλ‘ κ°λ₯νκ°?
A. κ°λ₯νμ§λ§ grep/sed μ‘°ν©μ΄ ν¨μ¬ ν¨μ¨μ μ΄λ€.
Q. PythonμΌλ‘ νλ©΄ μ λλ?
A. κ°λ₯νμ§λ§ 리λ μ€ μλ²μμ μλΌμ΄λκ° λ λΉ λ₯΄λ€.
Q. CSV μλ°± MBλ awkλ‘ μ²λ¦¬λλ?
A. λλ€. λ§€μ° λΉ λ₯΄λ€.
10. 리λ μ€ ν μ€νΈ μ²λ¦¬ awk sedλ μ΄λ€ ν¨κ³Όλ₯Ό μ£Όλκ°?
μ΄ κΈμ λ΄μ©μ μμ§νλ©΄ λ€μ ν¨κ³Όκ° μλ€:
- λ‘κ·Έ λΆμ μλκ° λΉμ½μ μΌλ‘ λΉ¨λΌμ§λ€
- λ°λ³΅λλ μ€μ νμΌ μμ μμ μ μλνν μ μλ€
- CSV κΈ°μ€ μ«μ κ³μ°μ μ¦μμμ μνν μ μλ€
- μμ μμ΄λ μλ³Έ λ°μ΄ν°λ₯Ό λΉ λ₯΄κ² μ 리ν μ μλ€
- DevOps / μλ²μ΄μ / μλ² λλ νκ²½μμ νμ μ€ν¬ ν보
νΉν κ°λ°μμ μ΄μμκ° ν¨κ» 보λ νκ²½μμλ
“awk/sed λ€λ£° μ€ μλ μ¬λ”μ΄ μ 무 μλ μμ²΄κ° λ€λ₯΄λ€.