12.4. ÅØ½ºÆ® ó¸® ¸í·É¾î

¸í·É¾î ¸ñ·Ï

sort

ÁÖ·Î ÆÄÀÌÇÁ¿¡¼­ ÇÊÅÍ·Î ¾²¿© ÆÄÀÏÀ» Á¤·ÄÇÒ ¶§ ¾²ÀÔ´Ï´Ù. ´Ù¾çÇÑ Å°³ª ¹®ÀÚ À§Ä¡¿¡ µû¶ó ÅØ½ºÆ® ½ºÆ®¸²À̳ª ÆÄÀÏ Àüü¸¦ Á¤·ÄÇÒ ¼ö ÀÖ½À´Ï´Ù. -m ¿É¼ÇÀ» ¾²¸é ÀÌ¹Ì Á¤·ÄµÈ ÆÄÀÏÀ» ÇÕÃÄÁÝ´Ï´Ù. info page¿¡¼­ ¸¹Àº ±â´É°ú ¿É¼ÇµéÀ» º¼ ¼ö ÀÖ½À´Ï´Ù. ¿¹ 10-8°ú ¿¹ 10-9¸¦ Âü°íÇϼ¼¿ä.

tsort

À§»ó Á¤·Ä(Topological sort) ¸í·É¾î·Î¼­, °ø¹é¹®ÀÚ·Î ±¸ºÐµÇ´Â ¹®ÀÚ¿­ÀÇ ½ÖÀ» ÀÐ¾î ÆÐÅÏ¿¡ µû¶ó Á¤·Ä.

diff, patch

diff: À¯¿¬ÇÑ ÆÄÀÏ ºñ±³ À¯Æ¿¸®Æ¼. ´ë»ó ÆÄÀϵéÀ» ÁÙ ´ÜÀ§·Î Â÷·Ê Â÷·Ê ºñ±³ÇØ ÁÝ´Ï´Ù. ¿¹¸¦ µé¾î ³¹¸» »çÀüÀ» ºñ±³ÇÏ´Â ¾îÇø®ÄÉÀ̼ǿ¡¼­ sort¿Í uniq¸¦ ½á¼­ ÆÄÀÏÀ» ÇÊÅ͸µÇÏ°í ÆÄÀÌÇÁ¸¦ ÅëÇØ diff·Î ³Ñ°ÜÁÖ´Â »óȲµî¿¡¼­ À¯¿ëÇÏ°Ô ¾²ÀÏ ¼ö ÀÖ½À´Ï´Ù. diff file-1 file-2 ´Â µÎ ÆÄÀÏ¿¡¼­ ¼­·Î ´Ù¸¥ ÁÙÀÌ ÀÖÀ¸¸é ±× ÁÙÀÌ ¼ÓÇØ ÀÖ´Â ÆÄÀÏÀ» ij·µ°ú ÇÔ²² º¸¿©ÁÝ´Ï´Ù.

--side-by-side ¿É¼ÇÀ» ÁÖ¸é ºñ±³ÇÒ ÆÄÀÏÀ» ¼­·Î ±¸ºÐµÈ Ä÷³¿¡ µÎ°í ÁÙ ´ÜÀ§·Î ºñ±³Çϸ鼭 ÀÏÄ¡ÇÏÁö ¾Ê´Â ÁÙÀ» Ç¥½ÃÇØ ÁÝ´Ï´Ù.

diffÀÇ ´Ù¾çÇÑ ÇÁ·ÐÆ®¿£µå(frontend)·Î´Â spiff, wdiff, xdiff, mgdiff°¡ ÀÖ½À´Ï´Ù.

ÀÛÀº Á¤º¸: diff ´Â ºñ±³ÇÒ µÎ ÆÄÀÏÀÌ ¶È°°À¸¸é Á¾·á »óÅ 0À» ¸®ÅÏÇÏ°í ´Ù¸£¸é 1À» ¸®ÅÏÇÕ´Ï´Ù. ÀÌ°Í ¶§¹®¿¡ diff¸¦ ½© ½ºÅ©¸³Æ®ÀÇ Å×½ºÆ®¹®¿¡¼­ ¾µ ¼ö ÀÖ½À´Ï´Ù(¾Æ·¡ ÂüÁ¶).

diff´Â º¸Åë patch¿¡ ¾µ ´Ù¸¥ ÆÄÀÏÀ» ¸¸µé¾î ³»´Âµ¥ ¾²ÀÔ´Ï´Ù. -e ¿É¼ÇÀº diff°¡ ÀÚ½ÅÀÇ Ãâ·ÂÀ» ed³ª ex ½ºÅ©¸³Æ®¿¡¼­ ¾µ ¼ö ÀÖ´Â ÆÄÀÏ·Î ¸¸µé¾î ³»°Ô ÇÕ´Ï´Ù.

patch: À¯¿¬ÇÑ ¹öÀü °ü¸® À¯Æ¿¸®Æ¼. patch´Â diff°¡ ¸¸µé¾î³½ ´Ù¸¥ ÆÄÀÏÀÌ ÁÖ¾îÁö¸é ÆÐŰÁöÀÇ ÀÌÀü ¹öÀüÀ» »õ·Î¿î ¹öÀüÀ¸·Î ¾÷±×·¹À̵å ÇØ ÁÙ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô ÇÏ¸é »õ·Ó°Ô ¹ßÇ¥µÈ ÆÐŰÁö Àüü¸¦ ¹èÆ÷ÇÒ ÇÊ¿ä ¾øÀÌ ºñ±³Àû ÀÛÀº "diff" ÆÄÀϸ¸ ¹èÆ÷ÇÏ¸é µÇ¹Ç·Î ¾ÆÁÖ Æí¸®ÇÕ´Ï´Ù. µû¶ó¼­ Ä¿³Î "ÆÐÄ¡"´Â ¸®´ª½º Ä¿³ÎÀÇ ºó¹øÇÑ ¹èÆ÷½Ã ´õ ¼±È£µË´Ï´Ù.

patch -p1 <patch-file
# 'patch-file'¿¡ ³ª¿­µÈ ¸ðµç º¯°æ »çÇ×À» 
# ±× ÆÄÀÏ ³»ºÎ¿¡¼­ ÂüÁ¶Çϰí ÀÖ´Â ÆÄÀÏ¿¡ ´ëÇØ Àû¿ë ÇØ ÁÝ´Ï´Ù.
# ÀÌ·¸°Ô ÇÏ¸é ÆÐŰÁöÀÇ »õ·Î¿î ¹öÀüÀ¸·Î ¾÷±×·¹À̵尡 µË´Ï´Ù.

Ä¿³Î ÆÐÄ¡ Çϱâ:

cd /usr/src
gzip -cd patchXX.gz | patch -p0
# 'patch'·Î Ä¿³Î ¼Ò½º¸¦ ¾÷±×·¹À̵å Çϱâ.
# À͸íÀÇ ÀúÀÚ(¾Ë¶õ ÄÛ½º?)°¡ ¾´ ¸®´ª½º Ä¿³Î ¹®¼­ "README"¿¡¼­ Àοë.

Âü°í: diff´Â µð·ºÅ丮 Æ®¸® Àüüµµ ºñ±³ÇÒ ¼ö ÀÖ½À´Ï´Ù(½ÇÁ¦·Î Á¸ÀçÇÏ´Â ÆÄÀÏ¿¡ ´ëÇØ¼­).

bash$ diff ~/notes1 ~/notes2
Only in /home/bozo/notes1: file02
Only in /home/bozo/notes1: file03
Only in /home/bozo/notes2: file04
	      

ÀÛÀº Á¤º¸: gzipÀ¸·Î ¹­ÀÎ ÆÄÀÏÀ» ºñ±³ÇÏ·Á¸é zdiff ¸¦ ¾²¼¼¿ä.

diff3

diffÀÇ È®Àå ¹öÀüÀ¸·Î µ¿½Ã¿¡ ¼¼ °³ÀÇ ÆÄÀÏÀ» ºñ±³ÇØ ÁÝ´Ï´Ù. ¼º°ø½Ã¿¡´Â 0À» ¸®ÅÏÇÏÁö¸¸ ºÒÇàÇϰԵµ ºñ±³ °á°ú¿¡ ´ëÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö´Â ¾ø½À´Ï´Ù.

bash$ diff3 file-1 file-2 file-3
====
 1:1c
   This is line 1 of "file-1".
 2:1c
   This is line 1 of "file-2".
 3:1c
   This is line 1 of "file-3"
	      

sdiff

µÎ °³ÀÇ ÆÄÀÏÀ» ÇÑ ÆÄÀÏ·Î ÇÕÄ¡±â À§Çؼ­ ºñ±³Çϰųª ÆíÁýÇØ ÁÝ´Ï´Ù. ÀÌ ¸í·É¾î´Â »ç¿ëÀÚ¿Í ´ëÈ­(interactive) ÇØ¾ß Çϴ Ư¼ºÀÌ À־ ½ºÅ©¸³Æ®¿¡¼­ ¾²±â´Â ¾î·Æ½À´Ï´Ù.

cmp

cmp ¸í·É¾î´Â À§¿¡¼­ ¼³¸íÇÑ diffÀÇ °£´ÜÇÑ ¹öÀüÀÔ´Ï´Ù. diff°¡ µÎ ÆÄÀϰ£ÀÇ Â÷ÀÌÁ¡¿¡ ´ëÇØ¼­ º¸°íÇØ ÁÖ´Â ¹Ý¸é, cmp´Â ´ÜÁö µÎ ÆÄÀϰ£¿¡ ¼­·Î ´Ù¸¥ ºÎºÐ¸¸À» º¸¿©ÁÝ´Ï´Ù.

Âü°í: cmpµµ diffó·³ µÎ ÆÄÀÏÀÌ ¶È°°´Ù¸é Á¾·á »óÅ 0À» ¸®ÅÏÇÏ°í ´Ù¸£´Ù¸é 1À» ¸®ÅÏÇÕ´Ï´Ù. µû¶ó¼­ ½© ½ºÅ©¸³Æ®ÀÇ Å×½ºÆ®¹®¿¡¼­ cmp¸¦ ¾µ ¼ö ÀÖ½À´Ï´Ù.

¿¹ 12-8. ½ºÅ©¸³Æ®¿¡¼­ µÎ ÆÄÀÏÀ» ºñ±³Çϱâ À§ÇØ cmp ¾²±â.

#!/bin/bash

ARGS=2  # ÀÎÀÚ°¡ µÎ °³ ÇÊ¿äÇÕ´Ï´Ù.
E_BADARGS=65

if [ $# -ne "$ARGS" ]
then
  echo "»ç¿ë¹ý: `basename $0` file1 file2"
  exit $E_BADARGS
fi


cmp $1 $2 > /dev/null  # /dev/null Àº "cmp"ÀÇ Ãâ·ÂÀ» ¾È º¸ÀÌ°Ô ÇØÁÝ´Ï´Ù.
# 'diff'¿¡¼­µµ µ¿ÀÛÇÕ´Ï´Ù. Áï, diff $1 $2 > /dev/null 

if [ $? -eq 0 ]        # "cmp"ÀÇ Á¾·á »óŸ¦ È®ÀÎ.
then
  echo "\"$1\" Àº \"$2\" ¿Í ¶È°°Àº ÆÄÀÏÀÔ´Ï´Ù."
else  
  echo "\"$1\" Àº \"$2\" ¿Í ´Ù¸¥ ÆÄÀÏÀÔ´Ï´Ù."
fi

exit 0

ÀÛÀº Á¤º¸: gzipÀ¸·Î ¹­ÀÎ ÆÄÀÏ¿¡´Â zcmp¸¦ ¾²¼¼¿ä.

comm

´Ù¸ñÀû ÆÄÀÏ ºñ±³ À¯Æ¿¸®Æ¼. Á¦´ë·Î µÈ °á°ú¸¦ ¾òÀ¸·Á¸é ÆÄÀÏ ³»¿ëÀÌ Á¤·ÄµÅ ÀÖ¾î¾ß ÇÕ´Ï´Ù.

comm -options first-file second-file

comm file-1 file-2 Ãâ·ÂÀº ¼¼ Ä­À¸·Î ÀÌ·ç¾î Áý´Ï´Ù:

  • column 1 = file-1¿¡ À¯ÀÏÇÑ ÁÙ

  • column 2 = file-2¿¡ À¯ÀÏÇÑ ÁÙ

  • column 3 = µÎ ÆÄÀÏ ¾çÂÊ¿¡ °øÅëÀ¸·Î ³ªÅ¸³ª´Â ÁÙ

´ÙÀ½ ¿É¼ÇÀº Çϳª ÀÌ»óÀÇ Ãâ·Â Ä­À» Á¦°ÅÇØ ÁÝ´Ï´Ù.

  • -1 Àº 1¹ø Ä­À» Á¦°Å

  • -2 ´Â 2¹ø Ä­À» Á¦°Å

  • -3 Àº 3¹ø Ä­À» Á¦°Å

  • -12 ´Â 1¹ø°ú 2¹ø Ä­À» Á¦°Å, µîµî.

uniq

ÀÌ ÇÊÅÍ´Â Á¤·ÄµÈ ÆÄÀÏ¿¡¼­ Áߺ¹µÈ ÁÙÀ» Á¦°ÅÇÕ´Ï´Ù. º¸Åë ÆÄÀÌÇÁ¿¡¼­ sort¿Í °°ÀÌ ¾²ÀÔ´Ï´Ù.
cat list-1 list-2 list-3 | sort | uniq > final.list
# list ÆÄÀϵéÀ» ºÙÀ̰í,
# Á´·ÄÇÑ ´ÙÀ½,
# Áߺ¹µÈ ÁÙÀ» Á¦°ÅÇÑ ÈÄ,
# ¸¶Áö¸·À¸·Î °á°ú¸¦ Ãâ·Â ÆÄÀÏ·Î ÀúÀå.

À¯¿ëÇÑ ¿É¼ÇÀÎ -cÀ» ¾²¸é ÀÔ·Â ÆÄÀÏÀÇ °¢ ÁÙ ¾Õ¿¡ Áߺ¹µÈ ¼ö¸¦ Ç¥½ÃÇØ ÁÝ´Ï´Ù.

bash$ cat testfile
ÀÌ ÁÙÀº ÇÑ ¹ø¸¸ ³ª¿É´Ï´Ù.
ÀÌ ÁÙÀº µÎ ¹ø ³ª¿É´Ï´Ù.
ÀÌ ÁÙÀº µÎ ¹ø ³ª¿É´Ï´Ù.
ÀÌ ÁÙÀº ¼¼ ¹ø ³ª¿É´Ï´Ù.
ÀÌ ÁÙÀº ¼¼ ¹ø ³ª¿É´Ï´Ù.
ÀÌ ÁÙÀº ¼¼ ¹ø ³ª¿É´Ï´Ù.


bash$ uniq -c testfile
      1 ÀÌ ÁÙÀº ÇÑ ¹ø¸¸ ³ª¿É´Ï´Ù.
      2 ÀÌ ÁÙÀº µÎ ¹ø ³ª¿É´Ï´Ù.
      3 ÀÌ ÁÙÀº ¼¼ ¹ø ³ª¿É´Ï´Ù.


bash$ sort testfile | uniq -c | sort -nr
      3 ÀÌ ÁÙÀº ¼¼ ¹ø ³ª¿É´Ï´Ù.
      2 ÀÌ ÁÙÀº µÎ ¹ø ³ª¿É´Ï´Ù.
      1 ÀÌ ÁÙÀº ÇÑ ¹ø¸¸ ³ª¿É´Ï´Ù.
             

sort INPUTFILE | uniq -c | sort -nr À̶ó°í Çϸé INPUTFILE ÆÄÀÏÀÇ ¹ß»ý ºóµµ ¸ñ·ÏÀ» ¸¸µé¾î ÁÝ´Ï´Ù(sort ¸í·É¾îÀÇ -nrÀº ¼ýÀÚ¸¦ °Å²Ù·Î Á¤·Ä). ÀÌ ÅÛÇø´Àº ·Î±× ÆÄÀÏÀ̳ª »çÀü ¸ñ·Ï, ±¸¹® ºÐ¼®ÀÌ ÇÊ¿äÇÑ ¾î¶² °Í¿¡µµ ¾²ÀÏ ¼ö ÀÖ½À´Ï´Ù.

¿¹ 12-9. ³¹¸» ºóµµ¼ö ºÐ¼®

#!/bin/bash
# wf.sh: Á¶ÀâÇÑ ÅØ½ºÆ® ÆÄÀÏÀÇ ³¹¸» ºóµµ ºÐ¼®.


# ¸í·É¾îÁÙ¿¡¼­ÀÇ ÀÔ·Â ÆÄÀÏÀ» È®Àοë.
ARGS=1
E_BADARGS=65
E_NOFILE=66

if [ $# -ne $ARGS ]  # ÇÊ¿äÇÑ ÀÎÀÚ°¡ ½ºÅ©¸³Æ®·Î ¸Â°Ô ³Ñ¾î¿Ô´ÂÁö?
then
  echo "»ç¿ë¹ý: `basename $0` filename"
  exit $E_BADARGS
fi

if [ -f "$1" ]       # ÆÄÀÏÀÌ Á¸ÀçÇÏ´ÂÁö È®ÀÎ.
then
  file_name=$1
else
  echo "\"$1\" ´Â ¾ø´Â ÆÄÀÏÀÔ´Ï´Ù."
  exit $E_NOFILE
fi



########################################################
# ¸ÞÀÎ
sed -e 's/\.//g'  -e 's/ /\
/g' "$1" | tr 'A-Z' 'a-z' | sort | uniq -c | sort -nr
#                           =========================
#                            ¹ß»ý ºóµµ

#  Á¡(period)À» °É·¯³»°í ³¹¸» »çÀÌÀÇ ºó Ä­À» ¶óÀÎÇǵå·Î ¹Ù²Û ´ÙÀ½
#+ ¸ðµç ¹®ÀÚ¸¦ ¼Ò¹®ÀÚ·Î º¯È¯ÇÑ µÚ, 
#+ °¢ ³¹¸»ÀÇ ¹ß»ý ºóµµ¸¦ ¸Ç ¾Õ¿¡ µÎ°í ¼ýÀÚ´ë·Î Á¤·Ä.
########################################################

# µ¶ÀÚµéÀ» À§ÇÑ ¿¬½À¹®Á¦:
# 1) 'sed' ¸í·É¾î°¡ ÄÞ¸¶°°Àº ´Ù¸¥ ±¸µÔÁ¡µµ °É·¯³»µµ·Ï ÇØ º¸¼¼¿ä.
# 2) ¿©·¯°³ÀÇ ºó Ä­°ú ´Ù¸¥ °ø¹é¹®ÀÚµµ ó¸®Çϵµ·Ï °íÃÄ º¸¼¼¿ä.
# 3) ´Ù¸¥ Á¤·Ä¿ë ۸¦ Ãß°¡Çؼ­ µ¿ÀÏÇÑ ¹ß»ý ºóµµ¸¦ °®´Â ³¹¸»¿¡ ´ëÇØ¼­
#+   ¾ËÆÄºª ¼øÀ¸·Î Á¤·ÄµÇµµ·Ï ÇØ º¸¼¼¿ä.

exit 0

bash$ cat testfile
ÀÌ ÁÙÀº ÇÑ ¹ø¸¸ ³ª¿É´Ï´Ù.
ÀÌ ÁÙÀº µÎ ¹ø ³ª¿É´Ï´Ù.
ÀÌ ÁÙÀº µÎ ¹ø ³ª¿É´Ï´Ù.
ÀÌ ÁÙÀº ¼¼ ¹ø ³ª¿É´Ï´Ù.
ÀÌ ÁÙÀº ¼¼ ¹ø ³ª¿É´Ï´Ù.
ÀÌ ÁÙÀº ¼¼ ¹ø ³ª¿É´Ï´Ù.


bash$ ./wf.sh testfile
      6 ÀÌ
      6 ³ª¿É´Ï´Ù
      6 ÁÙÀº
      5 ¹ø
      3 ¼¼
      2 µÎ
      1 ÇÑ
      1 ¹ø¸¸
              

expand, unexpand

ÅÇÀ» ºó Ä­À¸·Î ¸¸µé¾î ÁÖ´Â ÇÊÅͷμ­ ÆÄÀÌÇÁ¿¡¼­ ÁÖ·Î ¾²ÀÔ´Ï´Ù.

unexpand ÇÊÅÍ´Â ºó Ä­À» ÅÇÀ¸·Î ¹Ù²ãÁÖ´Â ÇÊÅÍ·Î expand¿Í ¿ÏÀüÈ÷ ¹Ý´ë·Î µ¿ÀÛÇÕ´Ï´Ù.

cut

ÆÄÀÏ¿¡¼­ Çʵ带 »Ì¾Æ ³»´Â Åø. awkÀÇ print $N ¸í·É¾î ¼Â°ú ºñ½ÁÇÏÁö¸¸ ¾à°£ÀÇ Á¦ÇÑ »çÇ×À» °®°í ÀÖ½À´Ï´Ù. ½ºÅ©¸³Æ®¿¡¼­ awkº¸´Ù ´õ °£´ÜÇÏ°Ô ¾µ ¼ö ÀÖ½À´Ï´Ù. Ưº°È÷ Áß¿äÇÑ ¿É¼ÇÀ¸·Î -d(±¸ºÐÀÚ)¿Í -f(Çʵå Áö½ÃÀÚ)°¡ ÀÖ½À´Ï´Ù.

cutÀ¸·Î ¸¶¿îÆ® µÈ ÆÄÀÏ ½Ã½ºÅÛ ¸ñ·Ï ¾Ë¾Æ³»±â: ¾²±â:
cat /etc/mtab | cut -d ' ' -f1,2

cutÀ¸·Î OS¿Í Ä¿³Î ¹öÀü ¾Ë¾Æ³»±â:
uname -a | cut -d" " -f1,3,11,12

cut À¸·Î ÀÌ ¸ÞÀÏ Æú´õ¿¡¼­ ¸Þ¼¼Áö Çì´õ¸¦ »Ì¾Æ³»±â:
bash$ grep '^Subject:' read-messages | cut -c10-80
Re: Linux suitable for mission-critical apps?
 MAKE MILLIONS WORKING AT HOME!!!
 Spam complaint
 Re: Spam complaint

cutÀ¸·Î ÆÄÀÏÀ» ÆÄ½ÌÇϱâ:
# /etc/passwd ¿¡ µé¾îÀÖ´Â ¸ðµç »ç¿ëÀÚ ¸ñ·Ï.

FILENAME=/etc/passwd

for user in $(cut -d: -f1 $FILENAME)
do
  echo $user
done

# Oleg Philon ÀÌ Á¦°øÇØÁØ ¿¹Á¦.

cut -d ' ' -f2,3 filename Àº awk -F'[ ]' '{ print $2, $3 }' filename °ú °°Àº °á°ú¸¦ º¸¿©ÁÝ´Ï´Ù.

¿¹ 12-29 Âü°í.

colrm

Ä­ Á¦°Å ÇÊÅÍ. ÆÄÀÏ¿¡¼­ ¿©·¯ Ä­(±ÛÀÚµé ´ÜÀ§)À» Áö¿öÁִµ¥, Ä­ ¹üÀ§¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ¿ø·¡ ÆÄÀÏÀ» Ç¥ÁØÃâ·ÂÀ¸·Î ´Ù½Ã ³»º¸³À´Ï´Ù. colrm 2 4 <filename À̶ó°í Çϸé ÅØ½ºÆ® ÆÄÀÏÀÎ filename °¢ ÁÙÀÇ µÎ ¹øÂ° Ä­¿¡¼­ 4 ¹øÂ° Ä­ÀÇ ±ÛÀÚ¸¦ Áö¿ó´Ï´Ù.

ÁÖÀÇ

ÆÄÀÏ¿¡ ÅÇÀ̳ª Ãâ·Â ÇÒ ¼ö ¾ø´Â ±ÛÀÚ°¡ Æ÷ÇԵǾî ÀÖ´Ù¸é ¿¹»óÄ¡ ¸øÇÑ µ¿ÀÛÀ» ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ·± °æ¿ì¿¡´Â colrm ¾Õ¿¡ expand¿Í unexpand¸¦ ÆÄÀÌÇÁ·Î °É¾î¼­ ½á º¸±â ¹Ù¶ø´Ï´Ù.

paste

¼­·Î ´Ù¸¥ ÆÄÀϵéÀ» ¿©·¯ ´ÜÀ¸·Î ³ª´µ¾îÁø ÇϳªÀÇ ÆÄÀÏ·Î ¸¸µé¾î ÁÖ´Â Åø·Î¼­, cut°ú °°ÀÌ ½á¼­ ½Ã½ºÅÛ ·Î±× ÆÄÀÏÀ» ¸¸µå´Âµ¥ À¯¿ëÇÕ´Ï´Ù.

join

Ư¼öÇÑ ¸ñÀûÀ» °¡Áø paste·ùÀÇ ¸í·É¾î¶ó°í º¸¸é µË´Ï´Ù. µÎ ÆÄÀÏÀ» ÀǹÌÀÖ´Â ÇüÅ·Π¹­¾î¼­ º»ÁúÀûÀ¸·Î´Â °£´ÜÇÑ °ü°è µ¥ÀÌÅͺ£À̽º¸¦ ¸¸µé¾î ÁÖ´Â °­·ÂÇÑ À¯Æ¿¸®Æ¼ÀÔ´Ï´Ù.

join ¸í·É¾î´Â Á¤È®È÷ µÎ ÆÄÀÏ¿¡ ´ëÇØ¼­ µ¿ÀÛÇÏÁö¸¸ µÎ ÆÄÀÏ »çÀÌ¿¡ °øÅëÀ¸·Î Ç¥½ÃµÈ Çʵå(tagged field)(º¸ÅëÀº ¼ýÀÚ ¶óº§)°¡ µé¾î ÀÖ´Â ÁÙ¿¡ ´ëÇØ¼­¸¸ ÇÕÃļ­ °á°ú¸¦ Ç¥ÁØÃâ·Â¿¡ ¾¹´Ï´Ù. Á¦´ë·Î µ¿ÀÛÇÏ·Á¸é µÎ ÆÄÀÏ ¸ðµÎ, Ç¥½Ã Çʵ尡 Á¦´ë·Î Á¤·ÄµÇ¾î ÀÖ¾î¾ß ÇÕ´Ï´Ù.

File: 1.data

100 Shoes
200 Laces
300 Socks

File: 2.data

100 $40.00
200 $1.00
300 $2.00

bash$ join 1.data 2.data
File: 1.data 2.data

 100 Shoes $40.00
 200 Laces $1.00
 300 Socks $2.00
	      

Âü°í: Ç¥½Ã Çʵå´Â °á°ú¿¡¼­ ÇÑ ¹ø¸¸ ³ª¿É´Ï´Ù.

head

ÆÄÀÏ ¾ÕºÎºÐÀ» Ç¥ÁØÃâ·ÂÀ¸·Î º¸¿© ÁÝ´Ï´Ù(±âº»ÀûÀ¸·Î 10ÁÙÀ» º¸¿©ÁÖÁö¸¸ µû·Î ÁöÁ¤ÇØ ÁÙ ¼öµµ ÀÖ½À´Ï´Ù). head´Â Àç¹Õ´Â ¿É¼ÇÀÌ ¸î °³ ÀÖ½À´Ï´Ù.

¿¹ 12-10. 10ÀÚ¸® ·£´ýÇÑ ¼ýÀÚ ¸¸µé±â

#!/bin/bash
# rnd.sh: 10 ÀÚ¸® ·£´ýÇÑ ¼ýÀÚ Ãâ·Â

# Script by Stephane Chazelas.

head -c4 /dev/urandom | od -N4 -tu4 | sed -ne '1s/.* //p'


# =================================================================== #

# ºÐ¼®
# ----

# head:
# -c4 ¿É¼ÇÀº ù ¹øÂ° 4 ¹ÙÀÌÆ®¸¸ ¹Þ¾Æ µéÀÔ´Ï´Ù.

# od:
# -N4 ¿É¼ÇÀº Ãâ·ÂÀ» 4 ¹ÙÀÌÆ®·Î Á¦ÇÑÇØ ÁÝ´Ï´Ù.
# -tu4 ¿É¼ÇÀº Ãâ·ÂÀ» unsigned 10Áø Æ÷¸ËÀ¸·Î ÇØÁÝ´Ï´Ù.

#  sed: 
#  -n ¿É¼ÇÀº "s" ¸í·É¾îÀÇ "p" Ç÷¡±×¿Í °°ÀÌ ¾²¿©¼­ 
#+ ¿ÀÁ÷ ÀÏÄ¡ÇÏ´Â ÁÙ¸¸ Ãâ·ÂÇØ ÁÝ´Ï´Ù.



# ´ÙÀ½Àº ÀÌ ½ºÅ©¸³Æ®ÀÇ ÀúÀÚ°¡ 'sed'ÀÇ µ¿ÀÛ¿¡ ´ëÇØ¼­ ¼³¸íÇÑ ³»¿ëÀÔ´Ï´Ù.

# head -c4 /dev/urandom | od -N4 -tu4 | sed -ne '1s/.* //p'
# ----------------------------------> |

# "sed"·Î µé¾î°¡´Â Ãâ·ÂÀ»   --------> |
# 0000000 1198195154\n ¶ó°í °¡Á¤Çϸé

# sed°¡ 0000000 1198195154\n À» ÀÐÀ¸¸é,
# ´º¶óÀÎ(\n) ¹®ÀÚ¸¦ ¹ß°ßÇϱ⠶§¹®¿¡ ù ¹øÂ° ÁÙ(0000000 1198195154)¿¡ 
# ´ëÇØ¼­ ó¸®ÇÒ Áغñ°¡ µË´Ï´Ù.
# ±× ´ÙÀ½¿¡´Â ÀÚ½ÅÀÇ <ÁÖ¼Ò ¹üÀ§><µ¿ÀÛ> À» Âü°íÇϴµ¥ ¿©±â¼­´Â

#   ÁÖ¼Ò ¹üÀ§  µ¿ÀÛ
#   1          s/.* //p

# °¡ µË´Ï´Ù.

# ÁÙ ¹øÈ£°¡ ÁÖ¼Ò ¹üÀ§¾È¿¡ µé¾î°¡±â ¶§¹®¿¡ µ¿ÀÛÀ» ¼öÇàÇÕ´Ï´Ù:
# ±× ÁÙ¿¡¼­ °ø¹é¹®ÀÚ·Î ³¡³ª´Â °¡Àå ±ä ¹®ÀÚ¿­("0000000 ")À» 
# ¾Æ¹«°Íµµ ¾Æ´Ñ °ÍÀ¸·Î(//) ġȯ½Ã۰í, ¼º°øÇÑ´Ù¸é ±× °á°ú¸¦ Ãâ·ÂÇØ ÁÝ´Ï´Ù
# (¿©±â¿¡¼­, "p"´Â "s" ¸í·É¾î¿¡ ´ëÇÑ Ç÷¡±×Áö "p" ¸í·É¾î°¡ ¾Æ´Õ´Ï´Ù).

# sed ´Â ÀÌÁ¦ ´ÙÀ½ ÀÔ·ÂÀ» ¹ÞÀ» Áغñ¸¦ ÇÕ´Ï´Ù(¿©±â¼­ ÁÖÀÇÇÒ Á¡Àº,
# ¸¸¾à¿¡ -n ¿É¼ÇÀÌ ¾ø´Ù¸é, ±× ÁÙÀ» ÇÑ ¹ø ´õ Ãâ·ÂÇÒ °ÍÀ̶ó´Â °ÍÀÔ´Ï´Ù).

# ±× ´ÙÀ½¿¡´Â ³ª¸ÓÁö ¹®ÀÚµéÀ» ÀÐ¾î µéÀ̴µ¥, ÆÄÀÏÀÇ ³¡À» ¹ß°ßÇÏ°Ô µË´Ï´Ù.
# ÀÌÁ¦ ¸¶Áö¸· ÁÙÀÓÀ» ³ªÅ¸³»´Â '$'°¡ ¸Å°ÜÁö´Â µÎ ¹øÂ° ÁÙÀ» ó¸®ÇÒ Áغñ°¡ µÈ°ÅÁÒ.
# ±×·±µ¥ µÎ ¹øÂ° ÁÙÀº ¾î¶² <¹üÀ§> ¿¡µµ µéÁö ¾Ê±â ¶§¹®¿¡ µ¿ÀÛÀ» ¸ØÃä´Ï´Ù.

# ÀÌ µ¿ÀÛµéÀ» °£´ÜÇÏ°Ô ¼³¸íÇØ º¸¸é ´ÙÀ½°ú °°½À´Ï´Ù:
# "ù¹øÂ° ÁÙ¸¸ ÀÐÀº ´ÙÀ½ Á¦ÀÏ ¿À¸¥ÂÊ¿¡ ³ª¿À´Â ºó Ä­±îÁö »èÁ¦ÇÑ ´ÙÀ½ Ãâ·Â"

# ÀÌ·¸°Ô ÇÏ¸é ´õ ÁÁÀ» ¼öµµ ÀÖ½À´Ï´Ù:
#           sed -e 's/.* //;q'

# µÎ °³ÀÇ <ÁÖ¼Ò ¹üÀ§><µ¿ÀÛ> À¸·Î ¾²ÀÏ ¼öµµ ÀÖ½À´Ï´Ù.
#           sed -e 's/.* //' -e q):

#   ÁÖ¼Ò ¹üÀ§                µ¿ÀÛ
#   ÀÏÄ¡ÇÏ´Â ÁÙ ¾øÀ½         s/.* //
#   ÀÏÄ¡ÇÏ´Â ÁÙ ¾øÀ½         q (quit)

# ÀÌ·¸°Ô Çϸé, sed ´Â ¿ÀÁ÷ ù ¹øÂ° ÁÙ¸¸ ÀÔ·ÂÀ¸·Î ¹Þ¾Æ µéÀÔ´Ï´Ù.
# "-n" ¿É¼ÇÀÌ ¾ø±â ¶§¹®¿¡ Á¾·áÇϱâ("q" ¸í·É¾î) Àü¿¡ ¹Ù²ï ÁÙÀ» Ãâ·ÂÇØ ÁÝ´Ï´Ù.

# =================================================================== #

# À§ÀÇ ÇÑ ÁÙÂ¥¸® ½ºÅ©¸³Æ®´Â ´õ °£´ÜÇÏ°Ô ¾µ ¼öµµ ÀÖ½À´Ï´Ù:
#           head -c4 /dev/urandom| od -An -tu4

exit 0
¿¹ 12-27 Âü°í.

tail

ÆÄÀÏÀÇ ¸¶Áö¸· ºÎºÐÀ» Ç¥ÁØÃâ·ÂÀ¸·Î º¸¿© ÁÝ´Ï´Ù(±âº»ÀûÀ¸·Î10ÁÙ). º¸Åë, ½Ã½ºÅÛ ·Î±× ÆÄÀÏÀÇ º¯°æ »çÇ×À» ÃßÀûÇÒ ¶§ ¾²´Âµ¥, ÆÄÀÏ µÞºÎºÐ¿¡ °è¼Ó µ¡ºÙ¿©Áö´Â »çÇ×À» º¼ ¼ö ÀÖ°Ô ÇØ ÁÖ´Â -f ¿É¼ÇÀ» ÁÖ¸é µË´Ï´Ù.

¿¹ 12-11. tail·Î ½Ã½ºÅÛ ·Î±×¸¦ ¸ð´ÏÅÍÇϱâ

#!/bin/bash

filename=sys.log

cat /dev/null > $filename; echo "±ú²ýÇÑ ÆÄÀÏ »ý¼º."
# Á¸ÀçÇÏÁö ¾Ê´Â ÆÄÀÏÀ̶ó¸é »õ·Î ¸¸µé°í,
# ±æÀ̸¦ 0 À¸·Î ¸¸µê.
# : > filename   À̶ó°í ÇØµµ µË´Ï´Ù.

tail /var/log/messages > $filename  
# ÀÌ ¸í·ÉÀÌ Á¦´ë·Î µ¿ÀÛÇÏ·Á¸é /var/log/messages ¿¡ ¾Æ¹«³ª ÀÐÀ» ¼ö ÀÖ´Â 
# ÆÛ¹Ì¼ÇÀÌ °É·Á ÀÖ¾î¾ß µË´Ï´Ù.

echo "$filename Àº ½Ã½ºÅÛ ·Î±×ÀÇ ¸¶Áö¸· ºÎºÐÀ» º¸¿©ÁÝ´Ï´Ù."

exit 0

¿¹ 12-4, ¿¹ 12-27, ¿¹ 30-5 Âü°í.

grep

Á¤±Ô Ç¥Çö½ÄÀ» ¾²´Â ´Ù¸ñÀû ÆÄÀÏ °Ë»ö µµ±¸·Î¼­, ¿ø·¡ ¿¹ÀüÀÇ ¶óÀÎ ¿¡µðÅÍÀÎ edÀÇ ¸í·É¾î³ª ÇÊÅÍ¿´´ø g/re/p¿¡¼­ µû¿Â °ÍÀ¸·Î global - regular expresstion - print¶õ ¶æÀÔ´Ï´Ù.

grep pattern [file...]

´ë»ó ÆÄÀÏ¿¡¼­ º¸Åë ÅØ½ºÆ®À̰ųª Á¤±Ô Ç¥Çö½ÄÀÎ patternÀ» ã¾Æ ÁÝ´Ï´Ù.

bash$ grep '[rst]ystem.$' osinfo.txt
The GPL governs the distribution of the Linux operating system.
	      

´ë»ó ÆÄÀÏÀÌ ÁÖ¾îÁöÁö ¾Ê´Â´Ù¸é ÆÄÀÌÇÁ¿¡¼­ ¾²¿©¼­ ´Ù¸¥ ¸í·É¾îÀÇ Ç¥ÁØÃâ·Â¿¡ ´ëÇÑ ÇÊÅÍ·Î µ¿ÀÛÇÕ´Ï´Ù.

bash$ ps ax | grep clock
765 tty1     S      0:00 xclock
901 pts/1    S      0:00 grep clock
	      

-i ¿É¼ÇÀº ´ë¼Ò¹®ÀÚ ±¸ºÐ ¾øÀÌ Ã£µµ·Ï ÇØÁÝ´Ï´Ù.

-l ¿É¼ÇÀº ÀÏÄ¡ÇÏ´Â ÁÙÀÌ ¾Æ´Ï¶ó ÀÏÄ¡ÇÏ´Â ÁÙÀÌ µé¾î ÀÖ´Â ÆÄÀϸ¸ º¸¿©ÁÝ´Ï´Ù.

-n ¿É¼ÇÀº ÀÏÄ¡ÇÏ´Â ÁÙ°ú ±× ÁÙ¹øÈ£¸¦ °°ÀÌ º¸¿© ÁÝ´Ï´Ù.

bash$ grep -n Linux osinfo.txt
2:This is a file containing information about Linux.
6:The GPL governs the distribution of the Linux operating system.
	      

-v (ȤÀº --invert-match) ¿É¼ÇÀº ÀÏÄ¡ÇÏ´Â ÆÐÅÏÀ» °É·¯³» ÁÝ´Ï´Ù.
grep pattern1 *.txt | grep -v pattern2

# "*.txt"¿¡¼­ "pattern2"´Â Á¦¿ÜÇϰí "pattern1"À» Æ÷ÇÔÇÏ´Â ¸ðµç ÁÙ.

-c (--count) ¿É¼ÇÀº ÀÏÄ¡ÇÏ´Â ÆÐÅÏÀ» º¸¿©ÁÖÁö ¾Ê°í ÀÏÄ¡ÇÑ È½¼ö¸¸ º¸¿©ÁÝ´Ï´Ù.
grep -c txt *.sgml   # ("*.sgml"¿¡¼­ "txt"°¡ ³ª¿À´Â Ƚ¼ö)


#   grep -cz .
#            ^ Á¡ÀÌ ÀÖ¾î¿ä.
# "."°ú ÀÏÄ¡Çϰí 0À¸·Î ±¸ºÐµÈ(-z) ¾ÆÀÌÅÛ °¹¼ö(-c)
# Áï, ÃÖ¼ÒÇÑ 1 ±ÛÀÚ ÀÌ»óÀ» Æ÷ÇÔÇÏ´Â ¾ÆÀÌÅÛ.
# 
printf 'a b\nc  d\n\n\n\n\n\000\n\000e\000\000\nf' | grep -cz .     # 4
printf 'a b\nc  d\n\n\n\n\n\000\n\000e\000\000\nf' | grep -cz '$'   # 5
printf 'a b\nc  d\n\n\n\n\n\000\n\000e\000\000\nf' | grep -cz '^'   # 5
#
printf 'a b\nc  d\n\n\n\n\n\000\n\000e\000\000\nf' | grep -c '$'    # 9
# ±âº»ÀûÀ¸·Î ´º¶óÀÎ ¹®ÀÚ(\n)°¡ ¾ÆÀÌÅÛÀ» ±¸ºÐÇØ ÁÝ´Ï´Ù.

# -z ¿É¼ÇÀº GNU "grep"¿¡¼­¸¸ ¾²ÀÌ´Â ¿É¼ÇÀÓ¿¡ ÁÖÀÇÇϼ¼¿ä.


# Thanks, S.C.

´ë»ó ÆÄÀÏÀ» Çϳª ÀÌ»ó Àû¾îÁÖ¸é ÀÏÄ¡ÇÏ´Â ÆÄÀϵµ °°ÀÌ º¸¿© ÁÝ´Ï´Ù.

bash$ grep Linux osinfo.txt misc.txt
osinfo.txt:This is a file containing information about Linux.
osinfo.txt:The GPL governs the distribution of the Linux operating system.
misc.txt:The Linux operating system is steadily gaining in popularity.
	      

ÀÛÀº Á¤º¸: ¿ÀÁ÷ ÇϳªÀÇ ÆÄÀÏ¿¡¼­¸¸ ãÀ¸·Á°í ÇÒ ¶§ grepÀÌ °­Á¦·Î ÆÄÀÏÀ̸§À» º¸¿©ÁÖ°Ô ÇÏ°í ½ÍÀ¸¸é µÎ ¹øÂ° ÆÄÀÏ·Î /dev/nullÀ» ÁÖ¸é µË´Ï´Ù.

bash$ grep Linux osinfo.txt /dev/null
osinfo.txt:This is a file containing information about Linux.
 osinfo.txt:The GPL governs the distribution of the Linux operating system.
	      

grepÀº ÀÏÄ¡ÇÏ´Â ÆÐÅÏÀ» ãÀ¸¸é Á¾·á »óÅ 0À» ¸®ÅÏÇϴµ¥ Ãâ·ÂÀ» ¾È ÇÏ°Ô ÇØ ÁÖ´Â -q ¿É¼Ç°ú °°ÀÌ ½ºÅ©¸³Æ®ÀÇ Å×½ºÆ® ¹®¿¡¼­ ¾²¸é À¯¿ëÇÏ°Ô ¾µ ¼ö ÀÖ½À´Ï´Ù.
SUCCESS=0                      # grep °Ë»öÀÌ ¼º°øÇϸé
word=Linux
filename=data.file

grep -q "$word" "$filename"    # "-q" ¿É¼ÇÀº Ç¥ÁØÃâ·ÂÀ¸·Î ¾Æ¹«°Íµµ ¿¡ÄÚÇÏÁö
¾Ê½À´Ï´Ù.

if [ $? -eq $SUCCESS ]
then
  echo "$filename ¿¡¼­ $word ¹ß°ß"
else
  echo "$filename ¿¡¼­ $word ¹ß°ß ¸ø ÇÔ"
fi

¿¹ 30-5 Àº ½Ã½ºÅÛ ·Î±× ÆÄÀÏ¿¡¼­ grepÀ¸·Î ƯÁ¤ ³¹¸» ÆÐÅÏÀ» ã´Â °ÍÀ» º¸¿©ÁÝ´Ï´Ù.

¿¹ 12-12. ½ºÅ©¸³Æ®¿¡¼­ "grep"À» ¿¡¹Ä·¹ÀÌÆ® Çϱâ

#!/bin/bash
# grp.sh: 'grep'À» ¾ÆÁÖ Á¶ÀâÇÏ°Ô ´Ù½Ã ±¸Çö.

E_BADARGS=65

if [ -z "$1" ]    # ÀÎÀÚ È®ÀÎ.
then
  echo "»ç¿ë¹ý: `basename $0` pattern"
  exit $E_BADARGS
fi  

echo

for file in *     # $PWD ÀÇ ¸ðµç ÆÄÀÏÀ» Ž»ö.
do
  output=$(sed -n /"$1"/p $file)  # ¸í·É¾î ġȯ.

  if [ ! -z "$output" ]           # "$output" À» Äõ¿ìÆ® ¾È ÇÏ¸é ¾î¶»°Ô µÉ±î¿ä?
  then
    echo -n "$file: "
    echo $output
  fi              #  sed -ne "/$1/s|^|${file}: |p"  ¶ó°í ÇØµµ ¶È°°½À´Ï´Ù.

  echo
done  

echo

exit 0

# µ¶ÀÚ¿ë ¿¬½À¹®Á¦:
# ---------------
# 1) ÁÖ¾îÁø ÆÄÀÏ¿¡¼­ Çϳª ÀÌ»ó ÀÏÄ¡ÇÑ´Ù¸é Ãâ·Â¿¡ ´º¶óÀÎÀ» Ãß°¡ÇØ º¸¼¼¿ä.
# 2) ¿©·¯°¡Áö Ư¡µéÀ» Ãß°¡ÇØ º¸¼¼¿ä.

Âü°í: egrep Àº grep -E¿Í °°½À´Ï´Ù. Á» ´õ À¯¿¬ÇÑ °Ë»ö ´É·ÂÀ» °®´Â È®Àå Á¤±Ô Ç¥Çö½Ä ¼ÂÀ» »ç¿ëÇÕ´Ï´Ù.

fgrep Àº grep -F¿Í °°½À´Ï´Ù. ¹®ÀÚ ±×´ë·ÎÀÇ °Ë»ö(Á¤±Ô Ç¥Çö½Ä ¾È ¾¸)¸¸ Çϱ⠶§¹®¿¡ ¼Óµµ°¡ ¾à°£ ºü¸¨´Ï´Ù.

agrep Àº grepÀÌ À¯»ç(approximate) ¸ÅĪÀ» ÇÒ ¼ö ÀÖ°Ô È®ÀåÇØ ÁÝ´Ï´Ù. ãÀ» ¹®ÀÚ¿­°ú ãÀº ¹®ÀÚ¿­Àº ÁÖ¾îÁø ¼ýÀÚ ¸¸Å­ÀÇ ¹®ÀÚ°¡ ´Ù¸¦ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ À¯Æ¿¸®Æ¼´Â ¸®´ª½º ¹èÆ÷ÆÇ¿¡¼­ ±âº»À¸·Î Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù.

ÀÛÀº Á¤º¸: ¾ÐÃàµÈ ÆÄÀÏ¿¡¼­ °Ë»öÀ» ÇÏ·Á¸é zgrep, zegrep, zfgrepÀ» ¾²¼¼¿ä. ¾ÐÃà ¾È µÈ ÆÄÀÏ¿¡ ´ëÇØ¼­µµ µ¿ÀÛÇÏÁö¸¸ grep, egrep, fgrep º¸´Ù´Â ¾à°£ ´À¸³´Ï´Ù. ¾ÐÃà ÆÄÀϰú ºñ¾ÐÃà ÆÄÀÏÀÌ ¼¯¿© ÀÖÀ» ¶§ »ç¿ëÇÏ¸é Æí¸®ÇÕ´Ï´Ù.

bzipÀ¸·Î ¾ÐÃàµÈ ÆÄÀÏ¿¡¼­ °Ë»öÀ» ÇÏ·Á¸é bzgrep À» ¾²¼¼¿ä.

look

lookÀº grep°ú ºñ½ÁÇÏ°Ô µ¿ÀÛÇÏÁö¸¸ Á¤·ÄµÈ ³¹¸» ¸ñ·ÏÀÎ "»çÀü"¿¡ µé¾î ÀÖ´Â ³¹¸»¿¡ ´ëÇØ¼­¸¸ ã½À´Ï´Ù. µû·Î ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é /usr/dict/words ¿¡ µé¾î ÀÖ´Â ³¹¸»¸¸ ã´Âµ¥ ´Ù¸¥ »çÀü ÆÄÀÏÀ» ÁöÁ¤ÇØ ÁÙ ¼öµµ ÀÖ½À´Ï´Ù.

¿¹ 12-13. ¸ñ·Ï¿¡ µé¾î ÀÖ´Â ³¹¸»µéÀÇ À¯È¿¼º È®ÀÎÇϱâ

#!/bin/bash
# lookup: µ¥ÀÌŸ ÆÄÀÏ¿¡ µé¾î ÀÖ´Â ¸ðµç ³¹¸»µé¿¡ ´ëÇØ¼­ »çÀü °Ë»öÀ» ¼öÇà.

file=words.data  # Å×½ºÆ®¿ë ³¹¸»µéÀÌ µé¾î ÀÖ´Â µ¥ÀÌŸ ÆÄÀÏ.

echo

while [ "$word" != end ]  # µ¥ÀÌŸ ÆÄÀÏÀÇ ¸¶Áö¸· ³¹¸».
do
  read word      # ·çÇÁÀÇ ³¡¿¡¼­ ÀçÁöÇâÀ» °É¾ú±â ¶§¹®¿¡ µ¥ÀÌŸ ÆÄÀÏ¿¡¼­ ÀÐÀ½.
  look $word > /dev/null  # »çÀü ÆÄÀÏÀÇ °á°ú¸¦ Ç¥½ÃÇÏÁö ¾ÊÀ½.
  lookup=$?      # 'look' ¸í·É¾îÀÇ Á¾·á »óÅÂ.

  if [ "$lookup" -eq 0 ]
  then
    echo "\"$word\" ´Â À¯È¿ÇÔ."
  else
    echo "\"$word\" ´Â À¯È¿ÇÏÁö ¾ÊÀ½."
  fi  

done <"$file"    # Ç¥ÁØÀÔ·ÂÀ» $file·Î ÀçÁöÇâ Çϱ⠶§¹®¿¡ $file¿¡¼­ "ÀÐÀ½".

echo

exit 0

# ----------------------------------------------------------------
# À§ÀÇ "exit" ¸í·É¾î ¶§¹®¿¡ ´ÙÀ½ ÄÚµå´Â ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù.


# Stephane Chazelas °¡ ´õ °£°áÇÑ ´ÙÀ½ Äڵ带 Á¦¾ÈÇØ ÁÖ¾ú½À´Ï´Ù:

while read word && [[ $word != end ]]
do if look "$word" > /dev/null
   then echo "\"$word\" ´Â À¯È¿ÇÔ."
   else echo "\"$word\" ´Â À¯È¿ÇÏÁö ¾ÊÀ½."
   fi
done <"$file"

exit 0
sed, awk

ÅØ½ºÆ® ÆÄÀÏÀ̳ª ¸í·É¾î Ãâ·ÂÀ» ÆÄ½ÌÇϴµ¥ ƯÈ÷ ¾Ë¸ÂÀº ½ºÅ©¸³Æ® ¾ð¾îÀÔ´Ï´Ù. Ȧ·Î ¾²ÀÏ ¼öµµ ÀÖ°í ÆÄÀÌÇÁ Áß°£À̳ª ½© ½ºÅ©¸³Æ®¿¡¼­ ¾²ÀÏ ¼öµµ ÀÖ½À´Ï´Ù.

sed

¸¹Àº ex ¸í·É¾îµéÀ» ¹èÄ¡ ¸ðµå¿¡¼­ ¾µ ¼ö ÀÖ°Ô ÇØÁÖ´Â ºñ´ëÈ­Çü(non-interactive) "½ºÆ®¸² ¿¡µðÅÍ"ÀÔ´Ï´Ù. ½© ½ºÅ©¸³Æ®¿¡¼­ ¾ÆÁÖ ÀÚÁÖ ¾²ÀÔ´Ï´Ù.

awk

ÇÁ·Î±×·¥ °¡´ÉÇÑ ÆÄÀÏ ºÐ¼®¹× Çü½ÄÈ­ ¸í·É¾î·Î¼­, ±¸Á¶È­µÈ ÅØ½ºÆ® ÆÄÀÏÀÇ Çʵ峪 Ä÷³À» »Ì¾Æ³»°í Á¶ÀÛÇϴµ¥ ¾ÆÁÖ Àû´çÇϸç, ¹®¹ýÀº C¿Í ºñ½ÁÇÕ´Ï´Ù.

wc

wc´Â ÆÄÀÏÀ̳ª I/O ½ºÆ®¸²¿¡ ³ªÅ¸³ª´Â "³¹¸» °¹¼ö"(word count)¸¦ ¾Ë·ÁÁÝ´Ï´Ù:
bash $ wc /usr/doc/sed-3.02/README
20     127     838 /usr/doc/sed-3.02/README
[20 lines  127 words  838 characters]

wc -w ´Â ³¹¸» °¹¼ö¸¸ ¾Ë·ÁÁÝ´Ï´Ù.

wc -l Àº ÁÙ ¼ö¸¸ ¾Ë·ÁÁÝ´Ï´Ù.

wc -c ´Â ±ÛÀÚ ¼ö¸¸ ¾Ë·ÁÁÝ´Ï´Ù.

wc -L À» °¡Àå ±ä ÁÙÀÇ ±æÀ̸¸ ¾Ë·ÁÁÝ´Ï´Ù.

wc ·Î ÇöÀç µð·ºÅ丮¿¡ .txt ÆÄÀÏÀÌ ¸î °³ ÀÖ´ÂÁö ¾Ë¾Æ³»±â:
$ ls *.txt | wc -l
# "*.txt" Áß, ÆÄÀÏ¸í¿¡ ¶óÀÎÇǵ尡 µé¾î ÀÖÁö ¾Ê´Â ÇÑ, Àß µ¿ÀÛÇÕ´Ï´Ù.

# ´Ù¸¥ ¹æ¹ý:
#      find . -maxdepth 1 -name \*.txt -print0 | grep -cz .
#      (shopt -s nullglob; set -- *.txt; echo $#)

# Thanks, S.C.

wc ·Î d ¿¡¼­ h »çÀÌÀÇ ¹®ÀÚ·Î ½ÃÀ۵Ǵ ÆÄÀϵé Å©±âÀÇ Àüü ÇÕÀ» ±¸Çϱâ.
bash$ wc [d-h]* | grep total | awk '{print $3}'
71832
	      

wc ·Î ÀÌ Ã¥ÀÇ ¸ÞÀÎ ¼Ò½º ÆÄÀÏ¿¡¼­ "Linux"°¡ ¸î ¹øÀ̳ª ³ª¿À´ÂÁö ¾Ë¾Æº¸±â.
bash$ grep Linux abs-book.sgml | wc -l
50
	      

¿¹ 12-27 ¿Í ¿¹ 16-5 µµ Âü°í.

¸î¸î ¸í·É¾î´Â ÀÚ½ÅÀÇ ¿É¼ÇÀ¸·Î wcÀÇ ÀϺΠ±â´ÉÀ» °®°í Àֱ⵵ ÇÕ´Ï´Ù.
... | grep foo | wc -l
# ÀÚÁÖ ¾²´ø°ÅÁÒ? ÇÏÁö¸¸ Á» ´õ °£´ÜÇÏ°Ô ¾µ ¼ö ÀÖ½À´Ï´Ù.

... | grep -c foo
# grepÀÇ "-c"(³ª "--count") ¿É¼ÇÀ» ¾²¼¼¿ä.

# Thanks, S.C.

tr

¹®ÀÚ º¯È¯ ÇÊÅÍ.

°æ°í

ÀûÀýÇÏ°Ô Äõ¿ìÆÃÀ̳ª ´ë°ýÈ£·Î ¹­¾îÁà¾ß ÇÕ´Ï´Ù. Äõ¿ìÆÃÀº tr ¸í·É¾î¿¡¼­ ¾²À̴ Ư¼öÇÑ ¹®ÀÚµéÀÌ ½©¿¡ ÀÇÇØ ÀçÇØ¼® µÇÁö ¾Êµµ·Ï ¸·¾ÆÁÝ´Ï´Ù. ´ë°ýÈ£´Â ½©ÀÌ È®ÀåÀ» ¸ø Çϵµ·Ï Äõ¿ìÆ® µÇ¾î¾ß ÇÕ´Ï´Ù.

tr "A-Z" "*" <filename À̳ª tr A-Z \* <filename Àº filename¿¡ µé¾î ÀÖ´Â ¸ðµç ´ë¹®ÀÚ¸¦ º°Ç¥·Î º¯È¯Çؼ­ Ç¥ÁØÃâ·ÂÀ¸·Î ³» º¸³À´Ï´Ù. ¸î¸î ½Ã½ºÅÛ¿¡¼­´Â ÀÌ·¸°Ô ÇÏ¸é ¾È µÇ°í tr A-Z '[**]' À̶ó°í ÇØ¾ß Á¦´ë·Î µ¿ÀÛÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

-d ¿É¼ÇÀº ÁöÁ¤µÈ ¹üÀ§¿¡ ÇØ´çÇÏ´Â ¹®ÀÚµéÀ» Áö¿ö ÁÝ´Ï´Ù.
tr -d 0-9 <filename
# "filename" ¿¡ µé¾î ÀÖ´Â ¸ðµç ¼ýÀÚ¸¦ Áö¿ö ÁÝ´Ï´Ù.

--squeeze-repeats(³ª -s) ¿É¼ÇÀº ¿¬¼ÓÀûÀÎ ¹®ÀÚµé Áß¿¡¼­ ù¹øÂ°¸¸ ³²±â°í ³ª¸ÓÁö ¹®ÀÚµéÀº Áö¿ö ÁÝ´Ï´Ù. ÀÌ ¿É¼ÇÀº °úµµÇÑ °ø¹é ¹®ÀÚ¸¦ Áö¿ï ¶§ À¯¿ëÇÕ´Ï´Ù.
bash$ echo "XXXXX" | tr --squeeze-repeats 'X'
X

¿¹ 12-14. toupper: ÆÄÀÏ ³»¿ëÀ» ¸ðµÎ ´ë¹®ÀÚ·Î ¹Ù²Þ.

#!/bin/bash
# ÆÄÀÏ ³»¿ëÀ» ¸ðµÎ ´ë¹®ÀÚ·Î ¹Ù²Þ.

E_BADARGS=65

if [ -z "$1" ]  # ¸í·É¾îÁÙ ÀÎÀÚ ¿©ºÎÀÇ Ç¥ÁØ È®ÀÎ ÀÛ¾÷.
then
  echo "»ç¿ë¹ý: `basename $0` filename"
  exit $E_BADARGS
fi  

tr a-z A-Z <"$1"

# À§¿Í °°Áö¸¸ POSIX ¹®Àڼ ǥ±â¹ýÀ» ¾²´Â ¹æ¹ý:
#        tr '[:lower:]' '[:upper:]' <"$1"
# Thanks, S.C.

exit 0

¿¹ 12-15. lowercase: ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀϸíÀ» ¼Ò¹®ÀÚ·Î ¹Ù²Þ.

#! /bin/bash
#
# ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀÏ À̸§À» ´Ù ¼Ò¹®ÀÚ·Î ¹Ù²Þ
#
# ¿ø·¡ John DuboisÀÇ ½ºÅ©¸³Æ®¸¦ Chet Ramey°¡ bash¿ëÀ¸·Î ¼öÁ¤ÇÑ °Í¿¡¼­ 
# ¿µ°¨À» ¾ò¾î º» ¹®¼­ÀÇ ÀúÀÚÀÎ Mendel Cooper°¡ »ó´çÈ÷ °£´ÜÇÏ°Ô ¼öÁ¤ÇßÀ½.


for filename in *                # ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀÏÀ» Ž»ö.
do
   fname=`basename $filename`
   n=`echo $fname | tr A-Z a-z`  # À̸§À» ¼Ò¹®ÀÚ·Î ¹Ù²Ù°í,
   if [ "$fname" != "$n" ]       # ¿ø·¡ ¼Ò¹®ÀÚ°¡ ¾Æ´Ñ ÆÄÀϸ¸ ¼Ò¹®ÀÚ·Î ¹Ù²Þ.
   then
     mv $fname $n
   fi  
done   

exit 0


# "exit" ¶§¹®¿¡ ´ÙÀ½ ÄÚµå´Â ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù.
#--------------------------------------------#
# ÀÌ ºÎºÐÀ» ½ÇÇà½ÃŰ·Á¸é À§ ½ºÅ©¸³Æ®¸¦ ¸ðµÎ Áö¿ì¼¼¿ä.

# À§ ½ºÅ©¸³Æ®´Â ÆÄÀÏÀ̸§¿¡ °ø¹éÀ̳ª ´º¶óÀÎÀÌ µé¾î ÀÖÀ» ¶§¿¡´Â Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù.

# ±×·¡¼­ Stephane Chazelas °¡ ´ÙÀ½ ½ºÅ©¸³Æ®¸¦ Á¦¾ÈÇØ ÁÖ¾ú½À´Ï´Ù.


for filename in *    # "*"´Â "/"°¡ µé¾î ÀÖ´Â ÆÄÀÏÀº ¸®ÅÏÇÏÁö ¾Ê±â ¶§¹®¿¡
                     # basename À» ¾µ Çʿ䰡 ¾ø½À´Ï´Ù.
do n=`echo "$filename/" | tr '[:upper:]' '[:lower:]'`
#                             POSIX ¹®Àڼ ǥ±â¹ý.
#                    ¸í·É¾î ġȯÀ» ÇØµµ ²¿¸®ºÎºÐ(trailing)ÀÇ ´º¶óÀÎÀÌ 
#                    Áö¿öÁöÁö ¾Ê±â ¶§¹®¿¡ / ¸¦ ºÙ¿´½À´Ï´Ù.
   # º¯¼ö ġȯ:
   n=${n%/}          # ÆÄÀÏÀ̸§¿¡¼­ ¾Æ±î ºÙÀÎ / ¸¦ Á¦°Å.
   [[ $filename == $n ]] || mv "$filename" "$n"
                     # ÆÄÀÏÀ̸§ÀÌ ÀÌ¹Ì ¼Ò¹®ÀÚÀÎÁö È®ÀÎ.
done

exit 0

¿¹ 12-16. du: µµ½º¿ë ÅØ½ºÆ® ÆÄÀÏÀ» UNIX¿ëÀ¸·Î º¯È¯.

#!/bin/bash
# du.sh: DOS ÅØ½ºÆ® ÆÄÀÏÀ» UNIX ÅØ½ºÆ® ÆÄÀÏ·Î º¯È¯.

E_WRONGARGS=65

if [ -z "$1" ]
then
  echo "»ç¿ë¹ý: `basename $0` filename-to-convert"
  exit $E_WRONGARGS
fi

NEWFILENAME=$1.unx

CR='\015'  # ij¸®Áö ¸®ÅÏ.
# DOS ÅØ½ºÆ® ÆÄÀÏ¿¡¼­´Â ÁÙ ³¡¿¡ CR-LF °¡ ºÙ½À´Ï´Ù.

tr -d $CR < $1 > $NEWFILENAME
# CR À» Áö¿ì°í »õ ÆÄÀÏ·Î ¾²±â.

echo "¿ø·¡ DOS ÅØ½ºÆ® ÆÄÀÏÀº \"$1\" À̰í,"
echo "º¯È¯µÈ UNIX ÅØ½ºÆ® ÆÄÀÏÀº \"$NEWFILENAME\" ÀÔ´Ï´Ù."

exit 0

¿¹ 12-17. rot13: ÃÊÇãÁ¢(ultra-weak) ¾Ïȣȭ, rot13.

#!/bin/bash
# rot13.sh: ¾ÆÁÖ À¯Ä¡ÇÑ °íÀüÀûÀÎ rot13 ¾Ë°í¸®Áò

# »ç¿ë¹ý: ./rot13.sh filename
# or      ./rot13.sh <filename
# or      ./rot13.sh ¶ó°í ÇÑ ´ÙÀ½ Űº¸µå¿¡¼­ ÀÔ·Â(stdin)

cat "$@" | tr 'a-zA-Z' 'n-za-mN-ZA-M'   # "a"´Â "n"ÀÌ µÇ°í, "b"´Â "o"°¡ µÇ´Âµî..
# 'cat "$@"' ¶ó°í Çϸé Ç¥ÁØÀÔ·ÂÀ̳ª ÆÄÀÏ¿¡¼­ ÀÔ·ÂÀ» ¹ÞÀ» ¼ö ÀÖ°Ô ÇØ ÁÝ´Ï´Ù.

exit 0

¿¹ 12-18. "Crypto-Quote" ÆÛÁñ ¸¸µé±â

#!/bin/bash
# crypto-quote.sh: Àο빮À» ¾Ïȣȭ

# ÀÌ ½ºÅ©¸³Æ®´Â À¯¸íÇÑ Àο빮À» °£´ÜÇÑ 1:1 ¾ËÆÄºª ġȯÀ» ÅëÇØ ¾Ïȣȭ ½ÃÄÑÁÝ´Ï´Ù.
#  °á°ú´Â ÀÏ¿ä ½Å¹®ÀÇ Op Ed(¿Å±äÀÌ: Opposite Editorial, ½Å¹®ÀÇ ¼­¸í ±â»ç³ª 
#+ ³íÆòÀÌ ½Ç¸®´Â ÆäÀÌÁö)¿¡¼­ º¼ ¼ö ÀÖ´Â "Crypto Quote" ÆÛÁñ°ú ºñ½ÁÇÕ´Ï´Ù.


key=ETAOINSHRDLUBCFGJMQPVWZYXK
# "key" ´Â ´Ü¼øÈ÷ ¾ËÆÄºªÀ» µÚ¼¯¾î ³õÀº °ÍÀÔ´Ï´Ù.
# ÀÌ "key"¸¦ ¹Ù²Ù¸é ¾Ïȣȭ°¡ ¹Ù²î°Ô µË´Ï´Ù.

# 'cat "$@"' ´Â Ç¥ÁØÀÔ·ÂÀ̳ª ÆÄÀÏ¿¡¼­ ÀÔ·ÂÀ» ¹Þ¾Æ µéÀÔ´Ï´Ù.
# Ç¥ÁØÀԷ¿¡¼­ ÀÔ·ÂÀ» ¹Þ´Â ´Ù¸é Control-D ·Î ³¡³»¸é µÇ°í,
# ÆÄÀÏÀ̶ó¸é ¸í·É¾îÁÙ ¸Å°³º¯¼ö·Î ÆÄÀÏÀ̸§À» ÁöÁ¤ÇØ ÁÖ¸é µË´Ï´Ù.

cat "$@" | tr "a-z" "A-Z" | tr "A-Z" "$key"
#        |  ´ë¹®ÀÚ·Î      |     ¾Ïȣȭ       
# ¼Ò¹®ÀÚ, ´ë¹®ÀÚ, ´ë¼Ò¹®ÀÚ°¡ ¼¯ÀÎ Àο빮¿¡ ´ëÇØ¼­ µ¿ÀÛÇÕ´Ï´Ù.
# ¾ËÆÄºªÀÌ ¾Æ´Ñ ¹®ÀÚµéÀº ±×´ë·Î µÓ´Ï´Ù.


# ÀÌ ½ºÅ©¸³Æ®¿¡ ÀÌ·± ÀÔ·ÂÀ» ³Ö´Â´Ù¸é,
# "Nothing so needs reforming as other people's habits."
# --Mark Twain
#
# °á°ú´Â ´ÙÀ½°ú °°À» °Ì´Ï´Ù:
# "CFPHRCS QF CIIOQ MINFMBRCS EQ FPHIM GIFGUI'Q HETRPQ."
# --BEML PZERC

# º¹È£È­¸¦ ÇÏ·Á¸é ÀÌ·¸°Ô ÇÏ¸é µË´Ï´Ù:
# cat "$@" | tr "$key" "A-Z"


#  ÀÌ °£´ÜÇÑ ¾Ïȣȭ´Â ¿¬Çʰú Á¾À̸¦ °¡Áö°í 
#+ Æò±Õ 12 ³â Á¤µµ °è»êÇÏ¸é ±Ý¹æ ±úÁý´Ï´Ù.

exit 0
fold

ÀÔ·Â ÁÙÀ» ÁÖ¾îÁø ³ÐÀÌ·Î Á¢¾îÁÖ´Â(wrap) ÇÊÅÍ. Ưº°È÷ À¯¿ëÇÑ -s ¿É¼ÇÀ» ¾²¸é ³¹¸» »çÀÌÀÇ ºó Ä­¿¡¼­ ÁÙÀ» ³ª´²ÁÝ´Ï´Ù(¿¹ 12-19¿Í ¿¹ A-2 Âü°í).

fmt

°£´ÜÇÑ ÆÄÀÏ Çü½ÄÈ­ ¸í·É¾î·Î ÆÄÀÌÇÁ Áß°£¿¡ ÇÊÅÍ·Î ¾²¿© ±ä ÁÙÀ» "Á¢±â"(wrap) À§ÇØ ¾²ÀÔ´Ï´Ù.

¿¹ 12-19. ÆÄÀÏ ¸ñ·Ï Çü½ÄÈ­.

#!/bin/bash

WIDTH=40                    # ³ÐÀÌ´Â 40 Çà.

b=`ls /usr/local/bin`       # ÆÄÀÏ ¸ñ·ÏÀ» ¾òÀº ´ÙÀ½...

echo $b | fmt -w $WIDTH

#  echo $b | fold - -s -w $WIDTH
#  ¶ó°í ÇØµµ µË´Ï´Ù.
 
exit 0

¿¹ 12-4 Âü°í.

ÀÛÀº Á¤º¸: fmtÀÇ °­·ÂÇÑ ´ëüǰÀÎ Kamil TomanÀÇ par À¯Æ¿¸®Æ¼´Â http://www.cs.berkeley.edu/ ~amc/Par/ ¿¡¼­ ±¸ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ptx

ptx [targetfile] ¸í·É¾î´Â targetfileÀÇ permuted index(»óÈ£ ÂüÁ¶ ¸®½ºÆ® - cross-reference list)¸¦ Ãâ·ÂÇØ ÁÝ´Ï´Ù. ÇÊ¿äÇÏ´Ù¸é ¿©±â¼­ ³ª¿Â °á°ú¸¦ ³ªÁß¿¡ ÇÊÅ͸µÀ̳ª Çü½ÄÈ­ÇØ¼­ ¾µ ¼öµµ ÀÖ½À´Ï´Ù.

column

Ä÷³ Çü½ÄÈ­ ¸í·É¾î. ¸ñ·Ï ÇüÅÂÀÇ ÅØ½ºÆ® Ãâ·ÂÀÇ Àû´çÇÑ °÷¿¡ ÅÇÀ» ³Ö¾î¼­ "¿¹»Û Ãâ·Â" Å×À̺íÀ» ¾ò°Ô ÇØ ÁÖ´Â ÇÊÅÍÀÔ´Ï´Ù.

¿¹ 12-20. column À¸·Î µð·ºÅ丮 ¸ñ·ÏÀ» Çü½ÄÈ­ Çϱâ

#!/bin/bash
# "column" ¸Ç ÆäÀÌÁö¿¡ ÀÖ´Â ¿¡Á¦¸¦ ¾à°£ ¼öÁ¤Çß½À´Ï´Ù.


(printf "PERMISSIONS LINKS OWNER GROUP SIZE MONTH DAY HH:MM PROG-NAME\n" \
; ls -l | sed 1d) | column -t

# "sed 1d" ´Â "total        N" À̶ó°í ³ª¿À´Â ù¹øÂ° ÁÙÀ» Áö¿öÁÝ´Ï´Ù.
# ¿©±â¼­ "N"Àº "ls -l"À̶ó°í ÇßÀ» ¶§ÀÇ Àüü ÆÄÀÏ ¼ö¸¦ ³ªÅ¸³À´Ï´Ù. 

# "column"ÀÇ -t ´Â Ç¥¸¦ ¿¹»Ú°Ô Âï±â(pretty-print) ¿É¼ÇÀÔ´Ï´Ù.

exit 0
nl

ÁÙ ¹øÈ£ ¸Å±â±â ÇÊÅÍ. nl filename À̶ó°í Çϸé filenameÀÇ ºó Ä­À» Á¦¿ÜÇÑ °¢ ÁÙ¿¡ ¿¬¼ÓÀûÀÎ ¹øÈ£¸¦ ºÙ¿©¼­ Ç¥ÁØÃâ·ÂÀ¸·Î º¸¿© ÁÝ´Ï´Ù. filenameÀ» ÁöÁ¤ÇØ ÁÖÁö ¾ÊÀ¸¸é Ç¥ÁØÀԷ¿¡ ´ëÇØ¼­ µ¿ÀÛÇÕ´Ï´Ù.

¿¹ 12-21. nl: ÀÚ±â Àڽſ¡°Ô ¹øÈ£¸¦ ºÙÀÌ´Â ½ºÅ©¸³Æ®.

#!/bin/bash

# ÀÌ ½ºÅ©¸³Æ®´Â ÀÌ ½ºÅ©¸³Æ® ÆÄÀÏ¿¡ ÁÙ ¹øÈ£¸¦ ºÙ¿©¼­ Ç¥ÁØÃâ·ÂÀ¸·Î µÎ ¹ø¾¿ Ãâ·ÂÇØ ÁÝ´Ï´Ù.

# 'nl' ¸í·É¾î´Â ºó ÁÙÀ» ¼¼Áö ¾Ê±â ¶§¹®¿¡ Áö±Ý ÀÌ ÁÙÀ» 3 ¹øÂ° ÁÙ·Î º¾´Ï´Ù.
# 'cat -n' Àº ¹Ù·Î À­ÁÙÀ» 5 ¹øÂ° ÁÙ·Î º¾´Ï´Ù.

nl `basename $0`

echo; echo  # ÀÌÁ¦ 'cat -n'À¸·Î ÇØ º¼±î¿ä.

cat -n `basename $0`
# 'cat -n' ÀÌ ´Ù¸¥ Á¡Àº ºó ÁÙ¿¡µµ ¹øÈ£¸¦ ºÙÀδٴ °Ì´Ï´Ù.
# ÁÖÀÇÇÒ Á¡Àº 'nl -ba' ¶ó°í Çϸé 'cat -n' °ú ¶È°°ÀÌ µ¿ÀÛÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.

exit 0
pr

Ãâ·Â Çü½ÄÈ­ ÇÊÅÍ. ÆÄÀÏÀ̳ª Ç¥ÁØÃâ·ÂÀ» ÇÁ¸°ÅÍ·Î Âï°Å³ª ÃâÆÇ¿ëÀ̳ª ½ºÅ©¸°À¸·Î º¸±â ÁÁÀº ¼½¼Ç ÇüÅ·ΠÆäÀÌÁö¸¦ ¸Å°Ü ÁÝ´Ï´Ù. Çà°ú ¿­À» Á¶ÀÛÇϱâ, ¿©·¯ ÁÙÀ» ÇÕÄ¡±â, ¸¶ÁøÀ» ³Ö¾î ÁÖ±â, ÁÙ¿¡ ¹øÈ£¸¦ ¸Å°Ü ÁÖ±â, ÆäÀÌÁö Çì´õ¸¦ ºÙ¿© ÁÖ±â, ¿©·¯ ÆÄÀÏÀ» ÇÕÄ¡±âµîÀ» ºñ·ÔÇÑ ´Ù¾çÇÑ ¿É¼ÇÀÌ °¡´ÉÇÕ´Ï´Ù. prÀº nl, paste, fold, column, expandÀÇ ±â´ÉÀ» ÇÕÄ£ °Íº¸´Ù ´õÇÑ ´É·ÂÀ» °¡Áø ¸í·É¾îÀÔ´Ï´Ù.

pr -o 5 --width=65 fileZZZ | more ¶ó°í Çϸé fileZZZ¸¦ ¸¶ÁøÀ» 5·Î Çϰí Àüü ÆøÀ» 65·Î ÇÏ°í ¸ÚÀÖ°Ô ÆäÀÌÁö¸¦ ¸Å°Ü¼­ ½ºÅ©¸°¿¡ »Ñ·Á ÁÝ´Ï´Ù.

Ưº°È÷ À¯¿ëÇÑ ¿É¼ÇÀÎ -d´Â ÇÑ ÁÙ¸¶´Ù °­Á¦·Î ºó ÁÙÀ» ³Ö¾îÁÝ´Ï´Ù(double-spacing, sed -G¿Í °°½À´Ï´Ù).

gettext

ÇÁ·Î±×·¥ÀÇ Ãâ·ÂÀ» ´Ù¸¥ ¾ð¾î·Î ¹ø¿ªÇؼ­ º¸¿©ÁÖ´Â GNU Áö¿ªÈ­(localization) À¯Æ¿¸®Æ¼ÀÔ´Ï´Ù. óÀ½¿£ C ÇÁ·Î±×·¥À» À§Çؼ­ ¾²¿´Áö¸¸ ½© ½ºÅ©¸³Æ®¿¡¼­µµ ¾²ÀÔ´Ï´Ù. info page¸¦ Âü°íÇϱ⠹ٶø´Ï´Ù.

iconv

ÁÖ·Î Áö¿ªÈ­¿¡¼­ ¾²ÀÌ´Â ¸í·É¾î·Î ÆÄÀÏÀ» ´Ù¸¥ ÀÎÄÚµù(¹®ÀÚ¼Â)À¸·Î º¯È¯ÇØ ÁÝ´Ï´Ù.

recode

ÀÌ ¸í·É¾î´Â iconvÀÇ °³¼±ÆÇÀ̶ó°í º¸¸é µË´Ï´Ù. ÆÄÀÏÀ» ´Ù¸¥ ÀÎÄÚµùÀ¸·Î º¯È¯ÇØÁÖ´Â ÀÌ ´Ù¸ñÀû À¯Æ¿¸®Æ¼´Â Ç¥ÁØ ¸®´ª½º ¼³Ä¡½Ã¿¡´Â Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù.

groff, gs, TeX

Groff, TeX, Æ÷½ºÆ®½ºÅ©¸³Æ®(postscript)´Â ÃâÆÇ¿ë ¿ø°í³ª Çü½ÄÈ­µÈ ºñµð¿À µð½ºÇ÷¹ÀÌ¿ë ÅØ½ºÆ® ¸¶Å©¾÷ ¾ð¾î(text markup language)µéÀÔ´Ï´Ù.

¸Ç ÆäÀÌÁö°¡ groffÀ» ¾¹´Ï´Ù(¿¹ A-1 Âü°í). °í½ºÆ®½ºÅ©¸³Æ®(ghostscript, gs)´Â Æ÷½ºÆ®½ºÅ©¸³Æ® ÇØ¼®±âÀÇ GPL ¹öÀüÀÔ´Ï´Ù. TeX´Â Donald KnuthÀÇ Á¤±³ÇÑ Á¶ÆÇ ½Ã½ºÅÛÀÔ´Ï´Ù. ÈçÈ÷, ÀÌ ¸¶Å©¾÷ ¾ð¾îµé¿¡ ³Ñ±æ ÀÎÀÚ³ª ¿É¼ÇµéÀ» ½© ½ºÅ©¸³Æ®·Î 󸮸¦ ÇØ¼­ ÆíÇÏ°Ô ¾¹´Ï´Ù.

lex, yacc

±¸¹® ºÐ¼®±â(lexical analyzer)ÀÎ lex´Â ÆÐÅÏ ¸ÅĪÀ» À§ÇÑ ÇÁ·Î±×·¥À» ¸¸µé¾î ³À´Ï´Ù. ¸®´ª½º ½Ã½ºÅÛ¿¡¼­´Â ÀÌ ¸í·É¾îÀÇ ºñƯÇã ¹öÀüÀÎ flex·Î ¹Ù²î¾ú½À´Ï´Ù.

yacc À¯Æ¿¸®Æ¼´Â ½ºÆå¼Â¿¡ ÀǰÅÇÑ ÆÄ¼­¸¦ ¸¸µé¾î ³À´Ï´Ù. ¸®´ª½º ½Ã½ºÅÛ¿¡¼­´Â ÀÌ ¸í·É¾îÀÇ ºñƯÇã ¹öÀüÀÎ bisonÀ¸·Î ¹Ù²î¾ú½À´Ï´Ù.