°í±Þ Bash ½ºÅ©¸³ÆÃ °¡À̵å: Bash¸¦ ÀÌ¿ëÇÑ ½© ½ºÅ©¸³ÆÃ ¿ÏÀü °¡À̵å | ||
---|---|---|
ÀÌÀü | 12Àå. ¿ÜºÎ ÇÊÅÍ, ÇÁ·Î±×·¥, ¸í·É¾î | ´ÙÀ½ |
ÁÖ·Î ÆÄÀÌÇÁ¿¡¼ ÇÊÅÍ·Î ¾²¿© ÆÄÀÏÀ» Á¤·ÄÇÒ ¶§ ¾²ÀÔ´Ï´Ù. ´Ù¾çÇÑ Å°³ª ¹®ÀÚ À§Ä¡¿¡ µû¶ó ÅØ½ºÆ® ½ºÆ®¸²À̳ª ÆÄÀÏ Àüü¸¦ Á¤·ÄÇÒ ¼ö ÀÖ½À´Ï´Ù. -m ¿É¼ÇÀ» ¾²¸é ÀÌ¹Ì Á¤·ÄµÈ ÆÄÀÏÀ» ÇÕÃÄÁÝ´Ï´Ù. info page¿¡¼ ¸¹Àº ±â´É°ú ¿É¼ÇµéÀ» º¼ ¼ö ÀÖ½À´Ï´Ù. ¿¹ 10-8°ú ¿¹ 10-9¸¦ Âü°íÇϼ¼¿ä.
À§»ó Á¤·Ä(Topological sort) ¸í·É¾î·Î¼, °ø¹é¹®ÀÚ·Î ±¸ºÐµÇ´Â ¹®ÀÚ¿ÀÇ ½ÖÀ» ÀÐ¾î ÆÐÅÏ¿¡ µû¶ó Á¤·Ä.
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 ¸¦ ¾²¼¼¿ä.
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" |
µÎ °³ÀÇ ÆÄÀÏÀ» ÇÑ ÆÄÀÏ·Î ÇÕÄ¡±â À§Çؼ ºñ±³Çϰųª ÆíÁýÇØ ÁÝ´Ï´Ù. ÀÌ ¸í·É¾î´Â »ç¿ëÀÚ¿Í ´ëÈ(interactive) ÇØ¾ß Çϴ Ư¼ºÀÌ ÀÖ¾î¼ ½ºÅ©¸³Æ®¿¡¼ ¾²±â´Â ¾î·Æ½À´Ï´Ù.
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 -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¹ø ÄÀ» Á¦°Å, µîµî.
ÀÌ ÇÊÅÍ´Â Á¤·ÄµÈ ÆÄÀÏ¿¡¼ Áߺ¹µÈ ÁÙÀ» Á¦°ÅÇÕ´Ï´Ù. º¸Åë ÆÄÀÌÇÁ¿¡¼ 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 ¹ø¸¸ |
ÅÇÀ» ºó ÄÀ¸·Î ¸¸µé¾î ÁÖ´Â ÇÊÅͷμ ÆÄÀÌÇÁ¿¡¼ ÁÖ·Î ¾²ÀÔ´Ï´Ù.
unexpand ÇÊÅÍ´Â ºó ÄÀ» ÅÇÀ¸·Î ¹Ù²ãÁÖ´Â ÇÊÅÍ·Î expand¿Í ¿ÏÀüÈ÷ ¹Ý´ë·Î µ¿ÀÛÇÕ´Ï´Ù.
ÆÄÀÏ¿¡¼ Çʵ带 »Ì¾Æ ³»´Â Åø. 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 2 4 <filename À̶ó°í Çϸé ÅØ½ºÆ® ÆÄÀÏÀÎ filename °¢ ÁÙÀÇ µÎ ¹øÂ° Ä¿¡¼ 4 ¹øÂ° ÄÀÇ ±ÛÀÚ¸¦ Áö¿ó´Ï´Ù.
ÁÖÀÇ |
ÆÄÀÏ¿¡ ÅÇÀ̳ª Ãâ·Â ÇÒ ¼ö ¾ø´Â ±ÛÀÚ°¡ Æ÷ÇԵǾî ÀÖ´Ù¸é ¿¹»óÄ¡ ¸øÇÑ µ¿ÀÛÀ» ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ·± °æ¿ì¿¡´Â colrm ¾Õ¿¡ expand¿Í unexpand¸¦ ÆÄÀÌÇÁ·Î °É¾î¼ ½á º¸±â ¹Ù¶ø´Ï´Ù. |
¼·Î ´Ù¸¥ ÆÄÀϵéÀ» ¿©·¯ ´ÜÀ¸·Î ³ª´µ¾îÁø ÇϳªÀÇ ÆÄÀÏ·Î ¸¸µé¾î ÁÖ´Â Åø·Î¼, cut°ú °°ÀÌ ½á¼ ½Ã½ºÅÛ ·Î±× ÆÄÀÏÀ» ¸¸µå´Âµ¥ À¯¿ëÇÕ´Ï´Ù.
Ư¼öÇÑ ¸ñÀûÀ» °¡Áø 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 |
Âü°í: Ç¥½Ã Çʵå´Â °á°ú¿¡¼ ÇÑ ¹ø¸¸ ³ª¿É´Ï´Ù.
ÆÄÀÏ ¾ÕºÎºÐÀ» Ç¥ÁØÃâ·ÂÀ¸·Î º¸¿© ÁÝ´Ï´Ù(±âº»ÀûÀ¸·Î 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 |
ÆÄÀÏÀÇ ¸¶Áö¸· ºÎºÐÀ» Ç¥ÁØÃâ·ÂÀ¸·Î º¸¿© ÁÝ´Ï´Ù(±âº»ÀûÀ¸·Î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 |
Á¤±Ô Ç¥Çö½ÄÀ» ¾²´Â ´Ù¸ñÀû ÆÄÀÏ °Ë»ö µµ±¸·Î¼, ¿ø·¡ ¿¹ÀüÀÇ ¶óÀÎ ¿¡µðÅÍÀÎ 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Àº 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 |
ÅØ½ºÆ® ÆÄÀÏÀ̳ª ¸í·É¾î Ãâ·ÂÀ» ÆÄ½ÌÇϴµ¥ ƯÈ÷ ¾Ë¸ÂÀº ½ºÅ©¸³Æ® ¾ð¾îÀÔ´Ï´Ù. Ȧ·Î ¾²ÀÏ ¼öµµ ÀÖ°í ÆÄÀÌÇÁ Áß°£À̳ª ½© ½ºÅ©¸³Æ®¿¡¼ ¾²ÀÏ ¼öµµ ÀÖ½À´Ï´Ù.
¸¹Àº ex ¸í·É¾îµéÀ» ¹èÄ¡ ¸ðµå¿¡¼ ¾µ ¼ö ÀÖ°Ô ÇØÁÖ´Â ºñ´ëÈÇü(non-interactive) "½ºÆ®¸² ¿¡µðÅÍ"ÀÔ´Ï´Ù. ½© ½ºÅ©¸³Æ®¿¡¼ ¾ÆÁÖ ÀÚÁÖ ¾²ÀÔ´Ï´Ù.
ÇÁ·Î±×·¥ °¡´ÉÇÑ ÆÄÀÏ ºÐ¼®¹× Çü½ÄÈ ¸í·É¾î·Î¼, ±¸Á¶ÈµÈ ÅØ½ºÆ® ÆÄÀÏÀÇ Çʵ峪 Ä÷³À» »Ì¾Æ³»°í Á¶ÀÛÇϴµ¥ ¾ÆÁÖ Àû´çÇϸç, ¹®¹ýÀº C¿Í ºñ½ÁÇÕ´Ï´Ù.
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 |
¸î¸î ¸í·É¾î´Â ÀÚ½ÅÀÇ ¿É¼ÇÀ¸·Î wcÀÇ ÀϺΠ±â´ÉÀ» °®°í Àֱ⵵ ÇÕ´Ï´Ù.
... | grep foo | wc -l # ÀÚÁÖ ¾²´ø°ÅÁÒ? ÇÏÁö¸¸ Á» ´õ °£´ÜÇÏ°Ô ¾µ ¼ö ÀÖ½À´Ï´Ù. ... | grep -c foo # grepÀÇ "-c"(³ª "--count") ¿É¼ÇÀ» ¾²¼¼¿ä. # Thanks, S.C. |
¹®ÀÚ º¯È¯ ÇÊÅÍ.
°æ°í |
ÀûÀýÇÏ°Ô Äõ¿ìÆÃÀ̳ª ´ë°ýÈ£·Î ¹¾îÁà¾ß ÇÕ´Ï´Ù. Äõ¿ìÆÃÀº 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 |
ÀÔ·Â ÁÙÀ» ÁÖ¾îÁø ³ÐÀÌ·Î Á¢¾îÁÖ´Â(wrap) ÇÊÅÍ. Ưº°È÷ À¯¿ëÇÑ -s ¿É¼ÇÀ» ¾²¸é ³¹¸» »çÀÌÀÇ ºó Ä¿¡¼ ÁÙÀ» ³ª´²ÁÝ´Ï´Ù(¿¹ 12-19¿Í ¿¹ A-2 Âü°í).
°£´ÜÇÑ ÆÄÀÏ Çü½ÄÈ ¸í·É¾î·Î ÆÄÀÌÇÁ Áß°£¿¡ ÇÊÅÍ·Î ¾²¿© ±ä ÁÙÀ» "Á¢±â"(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 [targetfile] ¸í·É¾î´Â targetfileÀÇ permuted index(»óÈ£ ÂüÁ¶ ¸®½ºÆ® - cross-reference list)¸¦ Ãâ·ÂÇØ ÁÝ´Ï´Ù. ÇÊ¿äÇÏ´Ù¸é ¿©±â¼ ³ª¿Â °á°ú¸¦ ³ªÁß¿¡ ÇÊÅ͸µÀ̳ª Çü½ÄÈÇØ¼ ¾µ ¼öµµ ÀÖ½À´Ï´Ù.
Ä÷³ Çü½ÄÈ ¸í·É¾î. ¸ñ·Ï ÇüÅÂÀÇ ÅØ½ºÆ® Ãâ·ÂÀÇ Àû´çÇÑ °÷¿¡ ÅÇÀ» ³Ö¾î¼ "¿¹»Û Ãâ·Â" Å×À̺íÀ» ¾ò°Ô ÇØ ÁÖ´Â ÇÊÅÍÀÔ´Ï´Ù.
¿¹ 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 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Àº nl, paste, fold, column, expandÀÇ ±â´ÉÀ» ÇÕÄ£ °Íº¸´Ù ´õÇÑ ´É·ÂÀ» °¡Áø ¸í·É¾îÀÔ´Ï´Ù.
pr -o 5 --width=65 fileZZZ | more ¶ó°í Çϸé fileZZZ¸¦ ¸¶ÁøÀ» 5·Î Çϰí Àüü ÆøÀ» 65·Î ÇÏ°í ¸ÚÀÖ°Ô ÆäÀÌÁö¸¦ ¸Å°Ü¼ ½ºÅ©¸°¿¡ »Ñ·Á ÁÝ´Ï´Ù.
Ưº°È÷ À¯¿ëÇÑ ¿É¼ÇÀÎ -d´Â ÇÑ ÁÙ¸¶´Ù °Á¦·Î ºó ÁÙÀ» ³Ö¾îÁÝ´Ï´Ù(double-spacing, sed -G¿Í °°½À´Ï´Ù).
ÇÁ·Î±×·¥ÀÇ Ãâ·ÂÀ» ´Ù¸¥ ¾ð¾î·Î ¹ø¿ªÇؼ º¸¿©ÁÖ´Â GNU Áö¿ªÈ(localization) À¯Æ¿¸®Æ¼ÀÔ´Ï´Ù. óÀ½¿£ C ÇÁ·Î±×·¥À» À§Çؼ ¾²¿´Áö¸¸ ½© ½ºÅ©¸³Æ®¿¡¼µµ ¾²ÀÔ´Ï´Ù. info page¸¦ Âü°íÇϱ⠹ٶø´Ï´Ù.
ÁÖ·Î Áö¿ªÈ¿¡¼ ¾²ÀÌ´Â ¸í·É¾î·Î ÆÄÀÏÀ» ´Ù¸¥ ÀÎÄÚµù(¹®ÀÚ¼Â)À¸·Î º¯È¯ÇØ ÁÝ´Ï´Ù.
ÀÌ ¸í·É¾î´Â iconvÀÇ °³¼±ÆÇÀ̶ó°í º¸¸é µË´Ï´Ù. ÆÄÀÏÀ» ´Ù¸¥ ÀÎÄÚµùÀ¸·Î º¯È¯ÇØÁÖ´Â ÀÌ ´Ù¸ñÀû À¯Æ¿¸®Æ¼´Â Ç¥ÁØ ¸®´ª½º ¼³Ä¡½Ã¿¡´Â Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù.
Groff, TeX, Æ÷½ºÆ®½ºÅ©¸³Æ®(postscript)´Â ÃâÆÇ¿ë ¿ø°í³ª Çü½ÄÈµÈ ºñµð¿À µð½ºÇ÷¹ÀÌ¿ë ÅØ½ºÆ® ¸¶Å©¾÷ ¾ð¾î(text markup language)µéÀÔ´Ï´Ù.
¸Ç ÆäÀÌÁö°¡ groffÀ» ¾¹´Ï´Ù(¿¹ A-1 Âü°í). °í½ºÆ®½ºÅ©¸³Æ®(ghostscript, gs)´Â Æ÷½ºÆ®½ºÅ©¸³Æ® ÇØ¼®±âÀÇ GPL ¹öÀüÀÔ´Ï´Ù. TeX´Â Donald KnuthÀÇ Á¤±³ÇÑ Á¶ÆÇ ½Ã½ºÅÛÀÔ´Ï´Ù. ÈçÈ÷, ÀÌ ¸¶Å©¾÷ ¾ð¾îµé¿¡ ³Ñ±æ ÀÎÀÚ³ª ¿É¼ÇµéÀ» ½© ½ºÅ©¸³Æ®·Î 󸮸¦ ÇØ¼ ÆíÇÏ°Ô ¾¹´Ï´Ù.
±¸¹® ºÐ¼®±â(lexical analyzer)ÀÎ lex´Â ÆÐÅÏ ¸ÅĪÀ» À§ÇÑ ÇÁ·Î±×·¥À» ¸¸µé¾î ³À´Ï´Ù. ¸®´ª½º ½Ã½ºÅÛ¿¡¼´Â ÀÌ ¸í·É¾îÀÇ ºñƯÇã ¹öÀüÀÎ flex·Î ¹Ù²î¾ú½À´Ï´Ù.
yacc À¯Æ¿¸®Æ¼´Â ½ºÆå¼Â¿¡ ÀǰÅÇÑ ÆÄ¼¸¦ ¸¸µé¾î ³À´Ï´Ù. ¸®´ª½º ½Ã½ºÅÛ¿¡¼´Â ÀÌ ¸í·É¾îÀÇ ºñƯÇã ¹öÀüÀÎ bisonÀ¸·Î ¹Ù²î¾ú½À´Ï´Ù.