作者 主題: 2004-09-07 台南班(4)  (閱讀 11717 次)

0 會員 與 1 訪客 正在閱讀本文。

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17393
    • 檢視個人資料
    • http://www.study-area.org
2004-09-07 台南班(4)
« 於: 2004-09-17 07:36 »
2004-0916(星期四)

* 溫習重點:
TEXT FILTERING
   col
   join / paste
   split
   diff
   cut
   grep
   sed
   awk
   bc

REGULAR EXPRESSIOIN
        literal
        meta
                anchor
   char set
                modifier


DATA STREAM
   file descriptor
   related device
   redirection


* 練習題:

1) 請問 col 的作用是甚麼?
(提示:請用 man 指令外加實作來理解)
   作用:

2) 請問 join 與 paste 有何不同? 請舉例說明:
   說明:

3) 請問 split 的功能是甚麼?  請舉例說明:
   說明:
說明其語法及如何修改輸出結果?
   說明:

4) 3) 請問 diff 的功能是甚麼?  請舉例說明:
   說明:

5) 請問 cut 命令的作用是甚麼?
   作用:
若,我只抓第 1 到第 7 個文字(charactor)如何操作呢?
   命令:
如何用 cut 命令將 /etc/passwd 的每位 user 的 uid 跟 gid 抓出來?
(提示:區隔符號是 : ,uid 在第 3 個欄位,gid 在第 4 個欄位):
   命令:

6) 請識別 Shell 與 Regulare Expression 在 meta 上的差異,
理解並正確處理命令行上的 RE meta.

7) 請列舉兩個常用的 RE anchor:
   說明:

8) 請列舉常見的 RE Character Set:
   說明:

9) 請列舉常見的 Modifier:
   說明:

10) 請問 echo "abccccccc" | egrep 'abc{3,5}' 是否能抓到結果? 並說明原因:
   說明:

11) 請問 grep 命令的作用是甚麼?
   作用:

請問帶 -v 參數又有啥用途?
   作用:
請列舉其它常用的參數及其意思:
   說明:

12) 請抽空學習一下 sed 跟 awk 這兩個複雜的命令,
(提示:別忘了 google 跟  newsgroup﹗)

13) 請問如下的命令各是啥意思:
   sed '3,7d'
   sed '8,$d'   #(若改用 head 你會如何做?)

若我有一個檔案的內容類似如下:
   ----abc----
   ----abc---abc----
   abc----abc-----abc---
   -------abc
請問,若執行如下命令,其結果將會如何?
   sed 's/abc/ABC/'
   sed 's/abc/ABC/2'
   sed 's/abc/ABC/g'

若,我想將全部的 abc 都刪除掉,用如下命令你將如何敲:
   tr:
   sed:

14) 同習題 15 ,若不用 cut 而用 awk ,
您如何抓到 /etc/passwd 的第 3 跟第 4 個欄位?
   命令:

15) 請列舉說明 shell 上常用的 Standard I/O (FD, Name, Device, Redrection):
   說明:

16) 4) 請問,要想將 STDOUT 與 STDERR 都存到同一份檔去(原內容必須保留),
請列出一個錯誤的寫法,及兩個正確寫法:
   錯誤寫法:
   正確寫法 1:
   正確寫法 2:

17) 請簡單說說 /dev/null 的作用是甚麼?
   說明:

若在一個 comand 中同時產生 STDOUT 與 STDERR ,
請問要如何讓熒幕只送出 STDERR ?
   命令語法:

要是反過來,只留下 STDOUT 呢?
   命令語法:

或是,要將兩者都隱藏掉呢?
   命令語法:


* next:
http://phorum.study-area.org/viewtopic.php?t=26294

eajean

  • 可愛的小學生
  • *
  • 文章數: 18
    • 檢視個人資料
2004-09-07 台南班(4)
« 回覆 #1 於: 2004-09-18 17:59 »
久等啦~  姑娘已經盡量在記憶曲線作怪前把作業做完
對抗曲線惡魔 ,大家一起加油吧
寫不齊全的部分,如果可以的話,請其他同學幫忙補上
希望有人接棒寫齊阿....^^

* 練習題:
1) 請問 col 的作用是甚麼?
(提示:請用 man 指令外加實作來理解)
作用:
讀入標準輸入寫入標準輸出…其實不太懂耶
還有什麼是reverse line?

2) 請問 join 與 paste 有何不同? 請舉例說明:
說明:
join 兩個檔案間一樣的欄位只會印出一次
paste會印出兩次
比如說
file1
1 a
2 b
3 c

file2
1 A
2 B
3 C

用join結果是
1 aA
2 bB
3 cC
用paste結果是
1 a   1A
2 b   2B
3 c   3C

3) 請問 split 的功能是甚麼? 請舉例說明:
說明: 將一個檔案切割成幾個短的小檔案
說明其語法及如何修改輸出結果?
說明:
spilt –l # file    (#是數字)
切出來的小檔案預設檔名格式為xaa,xab,xac…
若要更改小檔案的檔名格式 如下
spilt –l # file small_file的格式
如 spilt –l # file file_small.
產生出來的小檔案就會是file_small.aa, file_small.ab, file_small.ac

4) 請問 diff 的功能是甚麼? 請舉例說明:
說明: 尋找兩個檔案間的差異

5) 請問 cut 命令的作用是甚麼?
作用: 將檔案切出所需要的部分(cut縱切  split橫切 )
若,我只抓第 1 到第 7 個文字(charactor)如何操作呢?
命令: cut –c 1-7 file
如何用 cut 命令將 /etc/passwd 的每位 user 的 uid 跟 gid 抓出來?
(提示:區隔符號是 : ,uid 在第 3 個欄位,gid 在第 4 個欄位):
命令: cut –f 3,4 –d ‘:’ /etc/passwd

6) 請識別 Shell 與 Regular Expression 在 meta 上的差異,
理解並正確處理命令行上的 RE meta.
不太確定這題的問題的意思…..敬請指教唷
shell  RE   歸誰處理
o       x   shell
x       o   RE
x       x   literal
o       o   shell

7) 請列舉兩個常用的 RE anchor:
說明:
^ 句首
$ 句尾

8 請列舉常見的 RE Character Set:
說明:
    :或一
    [^list]:除外
    (abc):單一字串
    abc:個別字母
    .    :任一

    9) 請列舉常見的 Modifier:
    說明:
    *   0或多個
    ?   0或1
    +   1或多個
    {m,n}   m到n

    10) 請問 echo "abccccccc" | egrep 'abc{3,5}' 是否能抓到結果? 並說明原因:
    說明:
    是,因為modifier的右邊無界定符號

    11) 請問 grep 命令的作用是甚麼?
    作用: 印出符合字串的那行

    請問帶 -v 參數又有啥用途?
    作用: 相反  印出不符合者
    請列舉其它常用的參數及其意思:
    說明:
    -I 忽略大小寫
    -w字串完全吻合者
    -n行號也列出
    -c計算符合的有幾行
    -l列出檔名
    -r連子目錄相符的也列出

    12) 請抽空學習一下 sed 跟 awk 這兩個複雜的命令,
    (提示:別忘了 google 跟 newsgroup﹗)

    13) 請問如下的命令各是啥意思:
    sed '3,7d'                                  第3~7行不列出
    sed '8,$d' #(若改用 head 你會如何做?) head -7 file

    若我有一個檔案的內容類似如下:
    ----abc----
    ----abc---abc----
    abc----abc-----abc---
    -------abc
    請問,若執行如下命令,其結果將會如何?
    sed 's/abc/ABC/'    各行的第一個abc被取代為ABC
    sed 's/abc/ABC/2'   各行的第2個abc被取代為ABC
    sed 's/abc/ABC/g'    各行的每個abc皆被取代為ABC

    若,我想將全部的 abc 都刪除掉,用如下命令你將如何敲:
    tr: cat file | tr –d abc –s ‘ ‘
    sed: sed ’s/abc//g’ file    但刪掉的位置會留下一個空白  

    14) 同習題 5 ,若不用 cut 而用 awk ,
    您如何抓到 /etc/passwd 的第 3 跟第 4 個欄位?
    命令: awk –F: ‘{print $3”,”$4}’ /etc/passwd

    15) 請列舉說明 shell 上常用的 Standard I/O (FD, Name, Device, Redrection):
    說明:
    FD,    Name,   Device,   Redrection
    0   STDIN   keyboard   
  • <file

1   STDOUT   monitor   [1]>file
2   STDERR   monitor    2 >file

16) 請問,要想將 STDOUT 與 STDERR 都存到同一份檔去(原內容必須保留),
請列出一個錯誤的寫法,及兩個正確寫法:
錯誤寫法:    ls . /tmo >both.txt 2>both.txt
正確寫法 1:   ls . /tmo >both.txt 2>&1
正確寫法 2:   ls . /tmo &>both.txt

17) 請簡單說說 /dev/null 的作用是甚麼?
說明: 把東西丟到/dev/null 東西就會不見了…像黑洞耶
什麼東西跑到黑洞後就看不到了

若在一個 comand 中同時產生 STDOUT 與 STDERR ,
請問要如何讓螢幕只送出 STDERR ?
命令語法: [1]> /dev/null  

要是反過來,只留下 STDOUT 呢?
命令語法: 2 > /dev/null

或是,要將兩者都隱藏掉呢?
命令語法: &> /dev/null


----------
接下來就麻煩老師批改哩
個人覺得有老師的立即回餽..學習起來更起勁耶
其他人也可以試試阿 一起上來寫作業

eajean

  • 可愛的小學生
  • *
  • 文章數: 18
    • 檢視個人資料
2004-09-07 台南班(4)
« 回覆 #2 於: 2004-09-18 18:03 »
問題一
RE什麼情況會用上?能不能舉例
雖然以echo xxxx|egrep ‘……’ 可以驗證我們對這套表達的方式是否正確
但我對RE的用途還是不解
或許當時記憶體不足吧 腦筋用到別的地方去了
於是在此求救嚕 :cry:  

ps.小小心得
上課要把老師的句句箴言銘記在心實在不簡單呀
真的需要錄音,才能捕捉每個重點喔.... 下次我也要錄音了 :D

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17393
    • 檢視個人資料
    • http://www.study-area.org
2004-09-07 台南班(4)
« 回覆 #3 於: 2004-09-18 21:19 »
3) spilt –l # file (#是數字)
要特別留意 - l 之間不能有 IFS!

5)cut –c 1-7 file
cut –f 3,4 –d ‘:’ /etc/passwd
同上, -c, -f, -d 也是不能有 IFS.

13) 14) 等皆然同上.

15) 2 STDERR monitor 2 >file
要特別注意 2> 與 2 > 的差異(之間有否 IFS)!
請想想如下兩個命令有可差別:
ls 2> file
ls 2 > file

17) 同上.

* RE 用途很廣, 你常用到 grep(egrep), awk, sed, perl... 等, 都有可能碰到.
簡單來說就是字串的過濾, 等日後寫 shell script 時, 就更能體會了.
現在若不懂, 沒關係, 時間到了, 自然就會... ^_^

* 是的, 因為影響記憶曲線的三原因正是: 時間, 記憶量, 特性.
要清楚認識到在學習文字組合系統時, 以上因素的影響與圖形整合系統的落差.

eajean

  • 可愛的小學生
  • *
  • 文章數: 18
    • 檢視個人資料
2004-09-07 台南班(4)
« 回覆 #4 於: 2004-09-18 21:59 »
唔~有靈異事件!!
打作業的時候,我確定我並沒有在-和參數間留下空白鍵
寫作業的方式是先在word上打字
再貼到版上來

喔?這是不是像我們講到需要用col的那種情形
dos和unix彼此間有嫌隙??!
別想歪...我的意思是有縫隙,會多出空格或者<CR>之類的

我做個試驗看看
這是直接在版上keyin的
cut -c 1-7 file
這是由word貼上來的
cut –c 1-7 file...將游標左右移動了一下,發現-和c之間並沒有隔著任何字元阿
只是看起來真的很像-和c之間有IFS呢! :wink:

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17393
    • 檢視個人資料
    • http://www.study-area.org
2004-09-07 台南班(4)
« 回覆 #5 於: 2004-09-18 22:01 »
嗯, 原來如此... ^_^
那下次你試試用 notepad.ext 或 write.ext 來寫看看?

tedntsc

  • 可愛的小學生
  • *
  • 文章數: 5
    • 檢視個人資料
2004-09-07 台南班(4)
« 回覆 #6 於: 2004-09-18 23:13 »
複習了一下上課的內容~我也來做作業了!!!
----------------------------------------------
1) 請問 col 的作用是甚麼?
(提示:請用 man 指令外加實作來理解)
作用: col是過濾處理特殊字元
man cat |col -b testfile

2) 請問 join 與 paste 有何不同? 請舉例說明:
說明: join 兩個檔案間,共同的欄位合併
           paste 兩個檔案間,單純的合併,不管欄位
file1
1  a
2  b
3  c

file2
1  A
2  B
3  C

用join結果是 :
1 a A
2 b B
3 c C

用paste結果是:
1 a 1 A
2 b 2 B
3 c 3 C



3) 請問 split 的功能是甚麼? 請舉例說明:
說明: 將一個檔案切割成幾個短的小檔案
說明其語法及如何修改輸出結果?
說明: spilt -l# file (#是數字)
切出來的小檔案預設檔名格式為xaa,xab,xac…
若要更改小檔案的檔名格式 如下
spilt  -l# file small_file的格式
如 spilt -l # file cd.
產生出來的小檔案就會是cd.aa, cd.ab, cd.ac


4) 請問 diff 的功能是甚麼? 請舉例說明:
說明: 找出兩檔案間的差異
如:
file1:
adcsweeeeeee
dcfffvgfdcw
ddfrtghy

file2:
adcsweeeeeee
dcfffvgfdcw
ddfrtghy


$diff file1 file2
<ddfrtghy
>ddfrtghy

其中 <表示file1檔案   >表示file2檔案

5) 請問 cut 命令的作用是甚麼?
作用: 將檔案切出所需要的部分
若,我只抓第 1 到第 7 個文字(charactor)如何操作呢?
命令: cut -c 1-7 file
如何用 cut 命令將 /etc/passwd 的每位 user 的 uid 跟 gid 抓出來?
(提示:區隔符號是 : ,uid 在第 3 個欄位,gid 在第 4 個欄位):
命令: cut -f 3,4 -d ‘:’ /etc/passwd

6) 請識別 Shell 與 Regulare Expression 在 meta 上的差異,
理解並正確處理命令行上的 RE meta.
   Shell的meta 包含:
          1.prompt:$,#
          2.separator
          3.cr
   Regulare Expression(RE)的meta包含:
          1.anchor
             2.char set
          3.modifier
其中
像$ 在shell中是命令提示字元  在RE中成為句尾的代表符號
--------------
shell           RE                         歸誰處理
o                 x                           shell
x                 o                            RE
x                 x                          literal
o                 o                           shell

上面的代表:
若shell可執行RE不能執行,則歸shell處理
若shell不能執行RE可執行,則歸RE處理
若shell不能執行RE不能執行,則歸literal處理
若shell可執行RE可執行,則歸shell處理

7) 請列舉兩個常用的 RE anchor:
說明:  ^句首,$句尾

8) 請列舉常見的 RE Character Set:
說明:
 
    :或一
    [^list]:除外
    (abc):其中abc為單一字串
    abc:其中a b c 為三個 個別的字母
    . :任一


    9) 請列舉常見的 Modifier:
    說明:
    *            0或多個
    ?              0或1
    +            1或多個
    {m,n}       m個到n個

    10) 請問 echo "abccccccc" | egrep 'abc{3,5}' 是否能抓到結果? 並說明原因:
    說明:
    是,因為modifier{ }的右邊 無界定符號
    11) 請問 grep 命令的作用是甚麼?
    作用: 印出符合字串的那行

    請問帶 -v 參數又有啥用途?
    作用: 相反 印出不符合者  符合者則不印出
    請列舉其它常用的參數及其意思:
    說明:
    -i     忽略大小寫
    -w   字串完全吻合者
    -n    行號也列出
    -c    計算符合的有幾行
    -l    列出檔名
    -r   連子目錄相符的也列出


    12) 請抽空學習一下 sed 跟 awk 這兩個複雜的命令,
    (提示:別忘了 google 跟 newsgroup﹗)



    13) 請問如下的命令各是啥意思:
    sed '3,7d'          第3~7行不列出
    sed '8,$d' #(若改用 head 你會如何做?)  head -7 file
     
    若我有一個檔案的內容類似如下:
    ----abc----
    ----abc---abc----
    abc----abc-----abc---
    -------abc
    請問,若執行如下命令,其結果將會如何?
    sed 's/abc/ABC/'    各行的第一個abc被取代為ABC
    sed 's/abc/ABC/2'  各行的第2個abc被取代為ABC
    sed 's/abc/ABC/g'  各行的每個abc都被取代為ABC  

    若,我想將全部的 abc 都刪除掉,用如下命令你將如何敲:
    tr: cat file | tr –d abc –s ‘ ‘
    sed: sed ’s/abc//g’ file      刪掉的位置會留下一個空白

    14) 同習題 5 ,若不用 cut 而用 awk ,
    您如何抓到 /etc/passwd 的第 3 跟第 4 個欄位?
    命令: awk -F: ‘{print $3”,”$4}’ /etc/passwd

    15) 請列舉說明 shell 上常用的 Standard I/O (FD, Name, Device, Redrection):
    說明:
    FD      Name      Device          Redrection
    0       STDIN      keyboard      
  • <file

1       STDOUT    monitor         [1]>file
2       STDERR     monitor         2 >file

16)請問,要想將 STDOUT 與 STDERR 都存到同一份檔去(原內容必須保留),
請列出一個錯誤的寫法,及兩個正確寫法:
錯誤寫法:  ls . /tmo >both.txt 2>both.txt
正確寫法 1:  ls . /tmo >both.txt 2>&1
正確寫法 2:  ls . /tmo &>both.txt


17) 請簡單說說 /dev/null 的作用是甚麼?
說明: 一個空的設備,簡單的說就是空啦

若在一個 comand 中同時產生 STDOUT 與 STDERR ,
請問要如何讓熒幕只送出 STDERR ?
命令語法:
 [1]> /dev/null

要是反過來,只留下 STDOUT 呢?
命令語法:
2> /dev/null

或是,要將兩者都隱藏掉呢?
命令語法:
 &> /dev/null
---------------------------------
麻煩老師改一下了~~~ :oops:

爬了一下書~發現sed 和awk的功能還真是多...多到眼花撩亂!!
不知哪些命令及參數是sed和awk常用到的呢???

yyycome

  • 懷疑的國中生
  • **
  • 文章數: 37
    • 檢視個人資料
2004-09-07 台南班(4)
« 回覆 #7 於: 2004-09-19 22:29 »
呼呼~~終於有時間了  
呵呵 ~~ 請老師指教


* 練習題:

1) 請問 col 的作用是甚麼?
(提示:請用 man 指令外加實作來理解)
作用:
過濾掉<CR>
例:$cat  test | col -b > test2

2) 請問 join 與 paste 有何不同? 請舉例說明:
說明:
join 須要有共同的欄位
paste 不須要
例:
a file
1 a
2 b
3 c

b file
1 A
2 B
3 C

join a b
1.aA
2.bB
3.cC

paste
1 a 1 A
2 b 2 B
3 c 3 C

 
3) 請問 split 的功能是甚麼? 請舉例說明:
說明: 將一個檔案切成數分
例:我們要將一個檔案分成數等分,可以用split
說明其語法及如何修改輸出結果?
說明:
例:split -l 3 test (將test檔以每三行切成一個檔案)
      split -l 3 test AB (原本檔案為xab xac變為ABab ABac)
      cat AB* > test (全部的檔案再合併)

4) 3) 請問 diff 的功能是甚麼? 請舉例說明:
說明: 找出兩個檔案的差異
例:沒抄到


5) 請問 cut 命令的作用是甚麼?
作用: 從檔案的某部分開始擷取

若,我只抓第 1 到第 7 個文字(charactor)如何操作呢?
命令: $cut -c 3-7 file
如何用 cut 命令將 /etc/passwd 的每位 user 的 uid 跟 gid 抓出來?
(提示:區隔符號是 : ,uid 在第 3 個欄位,gid 在第 4 個欄位):
命令: $cut -f 3-4 -d ':' file


6) 請識別 Shell 與 Regulare Expression 在 meta 上的差異,
理解並正確處理命令行上的 RE meta.

shell與RE同時在 ==> shell
shell在 ,RE不在 ==>shell
shell不在,RE在 ==> RE
兩個都不在==>literal
 
意義變了
例:
$在shell為變數 ,但在RE為句尾
?在shell為任一,RE的任一為.

7) 請列舉兩個常用的 RE anchor:
說明:
^ 句首
$ 句尾

8) 請列舉常見的 RE Character Set:
說明:
    任一個
    [^list] 除了list以外
    (abc) single string(1set)
    abc indiviu char (3set


    9) 請列舉常見的 Modifier:
    說明:只對左邊的cahrt set作用
    * zero or more
    ? zeor or one
    + one or more
    {m,n} m to n

    10) 請問 echo "abccccccc" | egrep 'abc{3,5}' 是否能抓到結果? 並說明原因:
    說明:可以
    若改為'abc{3,5}&'則不行,因為這樣代表c只能有三到五個就要結束
    但現在為'abc{3,5}'代表c中間只要有3-5個,後面還有沒有不管它
    (不太會用文字解釋)
     

    11) 請問 grep 命令的作用是甚麼?
    作用: 對檔案句子處理,符合條件的即印出

    請問帶 -v 參數又有啥用途?
    作用: 不符合的印出
    請列舉其它常用的參數及其意思:
    說明:
    例:$grep -i file (忽略大小寫)
          $grep -w 'root'  file(只捉有單獨root的句子印出)
          $grep -c  'root' file (算出符合的數目)
          $grep -n  'root' file 抄了但不知道是什麼  

    12) 請抽空學習一下 sed 跟 awk 這兩個複雜的命令,
    (提示:別忘了 google 跟 newsgroup﹗)


    13) 請問如下的命令各是啥意思:
    sed '3,7d' => 刪除3.7行
    sed '8,$d' #(若改用 head 你會如何做?)
    => head -n +8
    若我有一個檔案的內容類似如下:
    ----abc----
    ----abc---abc----
    abc----abc-----abc---
    -------abc
    請問,若執行如下命令,其結果將會如何?
    sed 's/abc/ABC/'
    =>
    ----ABC----
    ----ABC---abc----
    ABC----abc-----abc---
    -------ABC

    sed 's/abc/ABC/2'
    =>
    ----ABC----
    ----ABC---ABC----
    ABC----ABC-----abc---
    -------ABC

    sed 's/abc/ABC/g'
    =>
    ----ABC----
    ----ABC---ABC----
    ABC----ABC-----ABC---
    -------ABC
     

    若,我想將全部的 abc 都刪除掉,用如下命令你將如何敲:
    tr: tr -d abc
    sed: sed '1~1d'
             sed 's/abc/\ /g'


    14) 同習題 15 ,若不用 cut 而用 awk ,
    您如何抓到 /etc/passwd 的第 3 跟第 4 個欄位?
    命令:
    不清楚
    15) 請列舉說明 shell 上常用的 Standard I/O (FD, Name, Device, Redrection):
    說明:

    FD  Name     Device      Redrection
    0    STDIN    keyboard  
  • <file

1    STDOUT monitor      [1]>file
2    STDERR monitor      2 >file


16) 4) 請問,要想將 STDOUT 與 STDERR 都存到同一份檔去(原內容必須保留),
請列出一個錯誤的寫法,及兩個正確寫法:
錯誤寫法: ls . /tmo >both.txt 2> both.txt
正確寫法 1: ls . /tmo >both.txt 2>> both.txt
正確寫法 2: ls . /tmo &>both.txt

17) 請簡單說說 /dev/null 的作用是甚麼?
說明: 空白file

若在一個 comand 中同時產生 STDOUT 與 STDERR ,
請問要如何讓熒幕只送出 STDERR ?
命令語法: ls . /tmo > /dev/null

要是反過來,只留下 STDOUT 呢?
命令語法: ls . /tmo 2> /dev/null

或是,要將兩者都隱藏掉呢?
命令語法:ls . /tmo >/dev/null 2> /dev/null
                    ls . /tmo &>/dev/null
df

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17393
    • 檢視個人資料
    • http://www.study-area.org
2004-09-07 台南班(4)
« 回覆 #8 於: 2004-09-19 22:54 »
1) col 不一定只刪 cr 啦, man col .
10) abc{3,5}& 改為 abc{3,5}$
11) grep -n 會顯示行號, 實作看看?
13) 將全部的 abc 都刪除掉: sed 's/abc//g'
14) awk '{print $3":"$4}' /etc/passwd
15) 2 >file 要改為 2>file (參考前面同學的評註)
16)  ls . /tmo >>both.txt 2>&1

birdo

  • 可愛的小學生
  • *
  • 文章數: 10
    • 檢視個人資料
2004-09-07 台南班(4)
« 回覆 #9 於: 2004-09-21 10:12 »
* 練習題:
1) 請問 col 的作用是甚麼?
(提示:請用 man 指令外加實作來理解)
作用: 轉換dox.txt與unix.txt文件
由於dos.txt<nl><cr>比unix<cr>中多了一個<nl>
ex: cat dos.txt | col –b >unix
2) 請問 join 與 paste 有何不同? 請舉例說明:
說明:
join需要common field之下才能夠正確使用
a.txt
1.a
2.b
3.c
b.txt
1.A
2.B
3.C
paste不用需要就可以直接貼上囉
3) 請問 split 的功能是甚麼? 請舉例說明:
說明: 切割檔案嚕,是橫向切,跟cut不同,cut是縱向切
說明其語法及如何修改輸出結果?
說明: split –l 數字 file (依照行數去切割)
          -b 大小 filt  (依照大小去切割)
預設來說,切割的檔案名稱會以x開頭xaa xab xac…..xaz…abb…
如果要改預設的檔案名稱只要split –option file (這裡改成你要修改的名稱)
Ex:split –l 2 file y(我要以y開頭,這樣子就會變成yaa yab yac …….)
4) 請問 diff 的功能是甚麼? 請舉例說明:
說明:顯示出檔案中不同的地方,
Ex: diff file1 file2
< (是file1不同的地方)
> (是file2不同的地方)

5) 請問 cut 命令的作用是甚麼?
作用: cut 就是縱向的切,
若,我只抓第 1 到第 7 個文字(charactor)如何操作呢?
命令: cut –c 1-7 file
如何用 cut 命令將 /etc/passwd 的每位 user 的 uid 跟 gid 抓出來?
(提示:區隔符號是 : ,uid 在第 3 個欄位,gid 在第 4 個欄位):
命令: cut –f 3,4 –d’:’ /etc/passwd(-f 3,4就是剪三跟四,依照:分隔符號)

6) 請識別 Shell 與 Regulare Expression 在 meta 上的差異,
理解並正確處理命令行上的 RE meta.
shell VS. RE
O      X    shell處理
X      O   RE處理
X      X   那就是普通的liter嚕
O      O   shell處理
所以要表達re的meta救用hard qouting來關掉shell的meta
7) 請列舉兩個常用的 RE anchor(錨點):
說明: ^:句首
      $:句尾
8) 請列舉常見的 RE Character Set:
說明:
    :其中一個(類似cildward)
    [^list]:除此之外(可不是[!list])
    (xxxx):有了()就扁是是單一字串,single string,1個set
    xxxx:沒有()所以就有了4個字串嚕,4個set
    .   :任一個(在shell就是?囉)   
    9) 請列舉常見的 Modifier(修改者):
    說明: modify the previous one char.set(修改上一個char.set)
    ※   :零或更多
    ?:零或一個
    +:至少一個
    {n,m}:修改n到m的char.set

    10) 請問 echo "abccccccc" | egrep 'abc{3,5}' 是否能抓到結果? 並說明原因:
    說明: 可以,因為你的modifier只是修改3到5,並沒有限定其後面的

    11) 請問 grep 命令的作用是甚麼?
    作用: 截取的意思
    Ex:who | grep root
    Ex:whp |grep ‘nologin$’截取以nologin當句尾的那一行

    請問帶 -v 參數又有啥用途?
    作用: 就是非char set嚕
    Ex:grep –v ‘^RE’ file 顯示非RE為句首的句子

    請列舉其它常用的參數及其意思:
    說明:
    grep –f(忽略大小寫)
    grep –w(符合詞的句子)
    grep –l 顯示出檔案的名字

    12) 請抽空學習一下 sed 跟 awk 這兩個複雜的命令,
    (提示:別忘了 google 跟 newsgroup﹗)

    13) 請問如下的命令各是啥意思:
    sed '3,7d' (把第3、至7行刪掉)
    sed '8,$d' #(若改用 head 你會如何做?)
    從第8行刪到最後一行所以要顯示前面七行因此:head -7 file
     若我有一個檔案的內容類似如下:
    ----abc----
    ----abc---abc----
    abc----abc-----abc---
    -------abc
    請問,若執行如下命令,其結果將會如何?
    sed 's/abc/ABC/'把第一個abc換為ABC
    sed 's/abc/ABC/2' 把二個abc換成ABC
    sed 's/abc/ABC/g' 把所有的abc換成ABC

    若,我想將全部的 abc 都刪除掉,用如下命令你將如何敲:
    tr: tr –d abc
    sed: sed ‘s/abc/ /’

    14) 同習題 15 ,若不用 cut 而用 awk ,
    您如何抓到 /etc/passwd 的第 3 跟第 4 個欄位?
    命令: awk –F: ‘{print $3”,”$4}’ /etc/passwd

    15) 請列舉說明 shell 上常用的 Standard I/O (FD, Name, Device, Redrection):
    說明:FD   name   device
    0    STDIN   keyboard(^p結束input)
    1   STDOUT   monitor
    2   STDERR   monitor

    16) 4) 請問,要想將 STDOUT 與 STDERR 都存到同一份檔去(原內容必須保留),
    請列出一個錯誤的寫法,及兩個正確寫法:
    錯誤寫法:
    正確寫法 1:ls ./ / yhyhy >both.txt 2>&1
     
    正確寫法 2:ls ./ /yhyhy 2>both.txt 1>&1
    錯誤寫法:ls ./ /yhyhy 1>both.txt 2>both.txt
    17) 請簡單說說 /dev/null 的作用是甚麼?
    說明: 一個空裝置,把檔案放在這裡會完全消失

    若在一個 comand 中同時產生 STDOUT 與 STDERR ,
    請問要如何讓熒幕只送出 STDERR ?
    命令語法: ls ./ /yhyhy 1>input.txt
    要是反過來,只留下 STDOUT 呢?
    命令語法:ls ./ /yhyhy 2>err.txt

    或是,要將兩者都隱藏掉呢?
    命令語法:
    ls ./ /yhyhy 1.input.txt 2>err.txt
    :o 請列舉說明 shell 上常用的 Standard I/O (FD, Name, Device, Redrection):
    老師請問一下,裡頭的FD是啥意思阿??

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17393
    • 檢視個人資料
    • http://www.study-area.org
2004-09-07 台南班(4)
« 回覆 #10 於: 2004-09-21 12:24 »
1) 不要將 col 的片面應用理解為全部, dos 與 unix 轉換只是其用一個小應用而已. 我已提示說要看 man . 此外, dos.txt 比 unix.txt 多了 cr 而不是多了 nl .

3) split 不一定是說"橫著切", 只有當文件有 nl 字符時, 且你用 -l 參數時, 才能如此說.

5) –d' :' 應該是 -d':'
(看來又是字體的問題, 後面相同. 下次請用 notepad.exe 來作答...謝謝!)

11) 忽略大小寫不是 -f 而是 -i . 請 man + 實作...

13) sed ‘s/abc/ /’ 應改為 sed 's/abc//' 也就是最後 // 之間沒任何空格.

15)(^p結束input) 應改為(^d結束input)

16) 正確寫法 1:ls ./ / yhyhy >>both.txt 2>&1
正確寫法 2:ls ./ /yhyhy 2>>both.txt 1>&1
(將 > 變 >> 就是了, 請重看題目要求.)

17) 請改用 /dev/null


FD=File Descripter (請重看筆記, 若漏抄, 請跟旁邊同學借...)

Anonymous

  • 訪客
2004-09-07 台南班(4)
« 回覆 #11 於: 2005-01-19 15:00 »
1) 請問 col 的作用是甚麼?
(提示:請用 man 指令外加實作來理解)
作用:
將反向與辦反向符號移除,並將white-space替換成tabs

2) 請問 join 與 paste 有何不同? 請舉例說明:
說明:
join會將兩個檔案第一個欄位相同者合併,第二個欄位以後依序排入(第一個欄位不相同,不顯示)
paste不做比對,直接將兩份檔案內容橫向合併
$cat file1
aaad bbbc ddef
aasd eeef akkk
ffff adddf dkkd

$cat file2
aaad bbbc ddef
ddd eeef akkk
ffff adddf dkkd

$join file1 file2
aaad bbbc ddef  bbbc ddef
ffff adddf dkkd  adddf dkkd

$paste file1 file2
aaad bbbc ddef  aaad bbbc ddef
aasd eeef akkk  ddd eeef akkk
ffff adddf dkkd  ffff adddf dkkd

3) 請問 split 的功能是甚麼? 請舉例說明:
說明:切割檔案
說明其語法及如何修改輸出結果?
說明:
$split [option] filename [x]
option
-a : 指定切割檔案的檔名有多少個字元(不包含開頭字元,預設2字元)
-b : 以bytes為單位來切割檔案(不會考慮換行問題,換行符號也必須納入計算)
-C: 以字元為單位切割檔案,該行不足指定字元則為單一個檔案,再繼續換行切割
-d : 指定切割檔案的檔名使用數字(系統自動命名部分)
-l : 以行為單位進行切割
ex:
$cat file1
12345678901234567
12345678901234567
$split -C 10  file1
產生四份檔案xaa xab xac xad
$cat xaa
1234567890
$cat xab
1234567
$cat xac
1234567890
$cat xad
1234567

4) 3) 請問 diff 的功能是甚麼? 請舉例說明:
說明:
以第二份檔案為標準,比對第一份檔案
$diff file1 file2
1c1
<123
--
>124
c表示第一份檔案第一行需換成第二份檔案的第一行,才會符合第二份檔案
如果完全符合,則不顯示任何訊息

5) 請問 cut 命令的作用是甚麼?
作用:剪下檔案中的部分字串
若,我只抓第 1 到第 7 個文字(charactor)如何操作呢?
命令:
$cut -n1-7 filename

如何用 cut 命令將 /etc/passwd 的每位 user 的 uid 跟 gid 抓出來?
(提示:區隔符號是 : ,uid 在第 3 個欄位,gid 在第 4 個欄位):
命令:
$cut -f3,4 -d ‘:’/etc/passwd

6) 請識別 Shell 與 Regulare Expression 在 meta 上的差異,
理解並正確處理命令行上的 RE meta.
shell的meta是針對指令的運行,而RE是針對文件內的字串搜尋規則
當同時存在shell與RE的meta時,shell優先權會比RE高,所以再使用
RE時,通常會利用hard quote或者escap來將shell的meta關閉,避免造成
判斷錯誤

7) 請列舉兩個常用的 RE anchor:
說明:
^ : 行首
$ : $行尾
< : 詞首
> : 詞尾
8) 請列舉常見的 RE Character Set:
說明:
abc : abc各自分開
(abc) : abc為一個集合
[abc] : a or b or c
[^abc] : not a or not b or not c
9) 請列舉常見的 Modifier:
說明:
* : zero or more times
+ : one or more
? : zero or more
{m,n} :between m and n

10) 請問 echo “abccccccc” | egrep ‘abc{3,5}’ 是否能抓到結果? 並說明原因:
說明:
是,雖然c出現7次,但abccccc以經符合RE的規則所以可以抓到結果
11) 請問 grep 命令的作用是甚麼?
作用:
help list : searching for pattern in each file or STDIN

請問帶 -v 參數又有啥用途?
作用:
顛倒RE的判斷條件
請列舉其它常用的參數及其意思:
說明:
$ cat file
aad
bbbaaad
ccd
$cat file | grep -Ev ‘^ad$’
bbbaaad
ccd
原本應該為aad,但是條件顛倒,所以列出與條件相反的項目

12) 請抽空學習一下 sed 跟 awk 這兩個複雜的命令,
(提示:別忘了 google 跟 newsgroup﹗)

13) 請問如下的命令各是啥意思:
sed ‘3,7d’
sed ‘8,$d’ #(若改用 head 你會如何做?)

若我有一個檔案的內容類似如下:
----abc----
----abc---abc----
abc----abc-----abc---
-------abc
請問,若執行如下命令,其結果將會如何?
sed ‘s/abc/ABC/’
sed ‘s/abc/ABC/2’
sed ‘s/abc/ABC/g’

若,我想將全部的 abc 都刪除掉,用如下命令你將如何敲:
tr:$cat 1.txt | tr -d ‘abc’
sed:

14) 同習題 15 ,若不用 cut 而用 awk ,
您如何抓到 /etc/passwd 的第 3 跟第 4 個欄位?
命令:

還沒看完sed與awk的部分..看完再來補..@@"


15) 請列舉說明 shell 上常用的 Standard I/O (FD, Name, Device, Redrection):
說明:
FD Name          Device         Redrection
0     STDIN       keyboard     [0]<file
1     STDOUT   moniter       [1]>file
3     STDERR    moniter        2 >file

16) 4) 請問,要想將 STDOUT 與 STDERR 都存到同一份檔去(原內容必須保留),
請列出一個錯誤的寫法,及兩個正確寫法:
錯誤寫法:
$ls xxx >file  2>file
正確寫法 1:
$ls xxx >file 2>&1

正確寫法 2:
$ls xxx >&file

17) 請簡單說說 /dev/null 的作用是甚麼?
說明:
將STDIN 與STDERR 導入/dev/null
如此就不會顯示任何東西

若在一個 comand 中同時產生 STDOUT 與 STDERR ,
請問要如何讓熒幕只送出 STDERR ?
命令語法:
$command >/dev/null

要是反過來,只留下 STDOUT 呢?
命令語法:
$command 2>/dev/null

或是,要將兩者都隱藏掉呢?
命令語法:
$command >&/dev/null

==========================
有問題請教老師..
col 的man page中..提到的反向與半反向換行符號(reverse and half reverse feeds)
所指的是什麼..看不大懂...
man page中有提到ESC + 7等....
但是不知道那是什麼符號..@@"
可否請老師舉例...謝謝..

Yeh Dan kie

  • 懷疑的國中生
  • **
  • 文章數: 40
    • 檢視個人資料
2004-09-07 台南班(4)
« 回覆 #12 於: 2005-01-19 15:02 »
不好意思...又忘記登入..@@"

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17393
    • 檢視個人資料
    • http://www.study-area.org
2004-09-07 台南班(4)
« 回覆 #13 於: 2005-02-14 23:05 »
我也不太清楚...  :p