• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • shell學習之 歷史遺跡

    發表于:2007-05-26來源:作者:點擊數: 標簽:
    2004-11-10 基本元字符集及其含義 ^ 只只匹配行首 $ 只只匹配行尾 * 只一個單字符后緊跟*,匹配0個或多個此單字符 [ ] 只匹配[ ]內字符??梢允且粋€單字符,也可以是字符序列??梢允褂? 表示[ ]內字符序列范圍,如用[ 1 - 5 ]代替[ 1 2 3 4 5 ] \ 只用來屏

    2004-11-10
    基本元字符集及其含義
    ^ 只只匹配行首
    $ 只只匹配行尾
    * 只一個單字符后緊跟*,匹配0個或多個此單字符
    [ ] 只匹配[ ]內字符??梢允且粋€單字符,也可以是字符序列??梢允褂?
    表示[ ]內字符序列范圍,如用[ 1 - 5 ]代替[ 1 2 3 4 5 ]
    \ 只用來屏蔽一個元字符的特殊含義。因為有時在s h e l l中一些元字符有
    特殊含義。\可以使其失去應有意義
    . 只匹配任意單字符
    p a t t e r n \ { n \ } 只用來匹配前面p a t t e r n出現次數。n為次數
    p a t t e r n \ { n,\ } m 只含義同上,但次數最少為n
    p a t t e r n \ { n,m \ } 只含義同上,但p a t t e r n出現次數在n與m之間


    例:
    #######
    . 的情況

    1。   ....xc....
    假定正在過濾一個文本文件,對于一個有1 0個字符的腳本集,要求前4個字符之后為X C,


    注意表達文件名時用單個?,而“.”用在正則里
    ls -l ?bc
    ls -l |grep ".bc"

    #######
    ^   只匹配行首
    2。 ^...1
    在行首第4個字符為1,

    #######
    $
    3.trouble$
    假定要匹配以
    單詞t r o u b l e結尾的所有行

    #######
    4.只返回包含一個字符的行
    ^.$

    ^youhongyu$只返回 只包含youhongyu的行

    #######
    使用\屏蔽一個特殊字符的含義

    $ . ' " [] ^ | ( ) \ + ?


    5.\*\.pas
    如果要在正則表達式中匹配以* . p a s結尾的所有文件

    ######
    []

    例:
    假定要匹配任意一個數字,可以使用:
    [ 0 1 2 3 4 5 6 7 8 9 ]
    然而,通過使用“-”符號可以簡化操作:
    [ 0 - 9 ]
    或任意小寫字母
    [ a - z ]
    要匹配任意字母,則使用:
    [ A - Z a - z ]
    表明從A - Z、a - z的字母范圍。
    如要匹配任意字母或數字,模式如下:
    [ A - Z a - z 0 - 9 ]
    在字符序列結合使用中,可以用[ ]指出字符范圍。假定要匹配一單詞,以s開頭,中間有
    一任意字母,以t結尾,那么操作如下:
    s[a-z A-Z]t


    注意^符號的使用,當直接用在第一個括號里,意指否定或不匹配括號里內容
    [^0-9]
    匹配任一非字母字符
    不在括號里是 只字首

    ################
    使用\匹配模式結果出現的次數

    操作如下:
    匹配字母A出現兩次,并以B結尾
    A \ { 2 \ } B
    匹配值為A A B
    匹配A至少4次,使用:
    A \ { 4 , \ } B
    可以得結果A A A A B或A A A A A A A B,但不能為A A A B。
    如給出出現次數范圍,例如A出現2次到4次之間:
    A \ { 2 , 4 \ } B
    則結果為A A B、A A A B、A A A A B,而不是A B或A A A A A B等。

    ########################
    經常使用的正則表達式舉例
    ^ 對行首
    $ 對行尾
    ^ [ t h e ] 對以t h e開頭行
    [ S s ] i g n a [ l L ] 對匹配單詞s i g n a l、s i g n a L、
    S i g n a l、S i g n a L
    [Ss]igna[lL]\. 對同上,但加一句點
    [ m a y M A Y ] 對包含m a y大寫或小寫字母的

    ^ U S E R $ 對只包含U S E R的行
    [tty]$ 對以t t y結尾的行
    \ . 對帶句點的行
    ^ d . . x . . x . . x 對對用戶、用戶組及其他用戶
    組成員有可執行權限的目錄
    ^ [ ^ l ] 對排除關聯目錄的目錄列表
    [ . * 0 ] 對0之前或之后加任意字符
    [ 0 0 0 * ] 對0 0 0或更多個
    [ iI] 對大寫或小寫I
    [ i I ] [ n N ] 對大寫或小寫i或n
    [ ^ $ ] 對空行
    [ ^ . * $ ] 對匹配行中任意字符串
    ^ . . . . . . $ 對包括6個字符的行
    [a- zA-Z] 對任意單字符
    [ a - z ] [ a - z ] * 對至少一個小寫字母
    [ ^ 0 - 9 \ $ ] 對非數字或美元標識
    [ ^ 0 - 0 A - Z a - z ] 對非數字或字母
    [ 1 2 3 ] 對1到3中一個數字
    [ D d ] e v i c e 對單詞d e v i c e或D e v i c e
    D e . . c e 對前兩個字母為D e,后跟兩個任意字符,最后為c e
    \ ^ q 對以^ q開始行
    ^ . $ 對僅有一個字符的行
    ^\.[0-9][0-9] 對以一個句點和兩個數字開始的行
    ' " D e v i c e " ' 對單詞d e v i c e
    D e [ V v ] i c e \ . 對單詞D e v i c e或d e v i c e
    [ 0 - 9 ] \ { 2 \ } - [ 0 - 9 ] \ { 2 \ } - [ 0 - 9 ] \ { 4 \ } 對日期格式d d - m m - y y y y
    [ 0 - 9 ] \ { 3 \ } \ . [ 0 - 9 ] \ { 3 \ } \ . [ 0 - 9 ] \ { 3 \ } \ . [ 0 - 9 ] \ { 3 \ } 對I P地址格式nnn. nnn.nnn.nnn
    [ ^ . * $ ] 對匹配任意行

    經常使用正則表達的命令 grep awk sed


    2004-10-27
    grep **********************************

    在g r e p 命令中輸入字符串參數時,最好將其用雙引號括起來。例如:“m y s t r i n g ”。這樣做
    有兩個原因,一是以防被誤解為s h e l l 命令,二是可以用來查找多個單詞組成的字符串,例如:
    “jet plane ”,如果不用雙引號將其括起來,那么單詞p l a n e 將被誤認為是一個文件,查詢結果
    將返回“文件不存在”的錯誤信息。
    在調用變量時,也應該使用雙引號,諸如:g r e p “$ M Y VA R ”文件名,如果不這樣,將
    沒有返回結果。在g r e p 命令中輸入字符串參數時,最好將其用雙引號括起來。例如:“m y s t r i n g ”。這樣做
    有兩個原因,一是以防被誤解為s h e l l 命令,二是可以用來查找多個單詞組成的字符串,例如:
    “jet plane ”,如果不用雙引號將其括起來,那么單詞p l a n e 將被誤認為是一個文件,查詢結果
    將返回“文件不存在”的錯誤信息。
    在調用變量時,也應該使用雙引號,諸如:g r e p “$ M Y VA R ”文件名,如果不這樣,將
    沒有返回結果。


    -s 屏蔽錯誤信息
    -i 區分大小寫
    -v 反向查找,就是找不包含的
    -w 只查找指定的單詞
    -E 擴充模式  比如查找 you 或者hong  grep -E 'you|hong'

    使用g r e p抽取精確匹配的一種更有效方式是在抽取字符串后加\ >。

    假定現在精確抽取4 8,
    缺省情況下, g r e p是大小寫敏感的,如要查詢大小寫不敏感字符串,必須使用- i開關
    如果要抽出記錄,使其行首不是4 8,可以在方括號中使用^記號,表明查詢在行首開始

    如果抽取以K開頭,以D結尾的所有代碼,可使用下述方法,因為已知代碼長度為5個字
    grep 'K...D' data.f

    將上述代碼做輕微改變,頭兩個是大寫字母,中間兩個任意,并以C結尾:
    grep '[A-Z][A-Z]..C'

    查詢包含1 9 9 8的所有記錄的另外一種方法是使用表達式[ 0 - 9 ] \ { 3 \ } [ 8 ],含義是任意數字重
    復3次,后跟數字8,
    grep '[0-9]\[8]'

    有時要查詢重復出現次數在一定范圍內,比如數字或字母重復出現2到6次,下例匹配數
    字8重復出現2到6次,
    grep '6\

    grep '6\至少兩次

    結合使用^和$可查詢空行。使用- n參數顯示實際行數:
    grep '^$' myfile

    查詢有特殊含義的字符,諸如$ . ' " * [] ^ | \ + ? ,必須在特定字符前加\。假設要查詢包含“.”
    的所有行,腳本如下:
    grep 'conftroll\.conf' myfile


    。系統中對文本文件有其標準的命名格式。一般最多
    六個小寫字符,后跟句點,接著是兩個大寫字符。
    grep '[a-z]\\.[A-Z]\'


    如果要查詢目錄列表中的目錄,方法如下:
    ls -l|grep '^d'

    如果在一個目錄中查詢不包含目錄的所有文件,方法如下:
    ls -l|grep '^[^d]'
    ^ 含義 行首
    ^ 不包含

    greo "aaron"  /etc/password >dev/null 2>
    腳本含義是匹配命令輸出或錯誤( 2 > $ 1),并將結果輸出到系統池。大多數系統管理員稱
    / d e v / n u l l為比特池,沒關系,可以將之看成一個無底洞,有進沒有出,永遠也不會填滿。


    grep "48<tab>" mysql.txt
    查找48后加tab鍵盤的在mysql.txt中

    grep "48/>" mysql.txt
    在mysql.txt中查找只包括48的行

    grep "48[34]" mysql.txt
    在mysql.txt中查找483,或者484行

    結合使用^和$可查詢空行。使用- n參數顯示實際行數:

    grep
    1。選項
    -c 只輸出匹配行的計數。  *****
    -i 不區分大小寫(只適用于單字符)。
    -h 查詢多文件時不顯示文件名。
    -l 查詢多文件時只輸出包含匹配字符的文件名。
    -n 顯示匹配行及行號。
    -s 不顯示不存在或無匹配文本的錯誤信息。
    -v 顯示不包含匹配文本的所有行。  ******

    例題:

    48 dec 3bc1997 lpsx 68.00
    1.精確匹配
    grep "48<tab>" data.f
    或者
    grep '48\>' data.f  通常用

    egrep
    如果要查詢存儲代碼3 2 L 或2 C C ,可以使用(|)符號,意即“|”符號兩邊之一或全部。

    egrep "(32L|2CC)" you.txt


    **************************************
    awk
    在碰到a w k錯誤時,可相應查找:                       
    ? 確保整個a w k命令用單引號括起來。
    ? 確保命令內所有引號成對出現。
    ? 確保用花括號括起動作語句,用圓括號括起條件語句。
    ? 可能忘記使用花括號,也許你認為沒有必要,但a w k不這樣認為,將按之解釋語法。


    awk '{print ,'} abc.txt
    打印1,4列 默認是空格做分割,代表整行

    awk 'BEGIN {print "name  Belt\n-----------------------"} {print "\t"}' abc.txt
    還可以加
    awk 'BEGIN {print "name  Belt\n-----------------------"} {print "\t"} END {print "end of report"}' abc.txt

    awk '{print NR}' abc.txt  打印行號

    awk '{if ( ~/b/) print }' mycron 
    包含 字符b
    awk '{if ( ~/1/) print }' mycron
    不包含b


    awk ' ~/([Yy]ellow|Brown)/' abc.txt

    awk '{if (=="Yellow"|| ~/Brown/) print }' abc.txt
     或者滿足
    awk '{if (=="Yellow"&& ~/Brown/) print }' abc.txt
    同時滿足

    2004-11

    ################################find
    希望在系統根目錄下查找更改時間在5日以內的文件,可以用:
    $ find / -mtime -5 -print
    為了在/ v a r / a d m目錄下查找更改時間在3日以前的文件,可以用:
    $ find /var/adm -mtime +3 -print


    find . -type l
    查找類型是連接文件的


    2004-11-06

    touch -d 11/04 abcc 修改或者創建時間是11月4號的文件
    touch -d 23:25 abcc 修改或者創建時間是23:25的文件
    和 -t的不同在于寫法 -t  11042325 11月4號23點25分


    shell 中單個的“\”  代表忽略后面的回車符號,命令從下一行繼續

    問題,如何看幫助如
    Usage: find [path...] [expression]
    default path is the current directory; default expression is -print
    expression may consist of:
    operators (decreasing precedence; -and is implicit where no others are given):
          ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2

          EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2
    options (always true): -daystart -depth -follow --help
          -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev
    tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N

          -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME
          -ilname PATTERN -iname PATTERN -inum N -ipath PATTERN -iregex PATTERN
          -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE

    shell
    ################################
    find
    語法: find 路徑 選項 [-print -exec -ok ]
    例子
    -name
    1。find . -name "*.txt"
    查找當前目錄下 所有名字有.txt的文件

    2。find / -name "[abc][0-9]"
    尋找 根目錄下 名字 第一個是a/b/c,第二個是數字的文件

    -perm
    3。find . -perm 755
    查找當前目錄下所有權限是755的文件

    -nouser
    4。find /home -nouser
    查找在/etc/password文件中沒有有效帳戶的文件

    -mtime
    5。find / -mtime -5
    查找5天以內的文件
    find / -mtime +5
    查找5天前的文件


    +5是大于五的意思,-5是小于5的意思
    6。查找比某個文件新,同時又比另某個文件舊的文件
    find / -newer age.awk ! -newer belts.awk

    技巧:
    如果要查找比更改時間前兩個小時的文件 可以先
    touch -t 11042140 dstamp  (創建比現在時間兩個小時前的文件:11月4號21點40分的一個文件)
    find . -newer dstamp 就可以查找兩個小時內的文件了。

    7。-type
    find /etc/ -type d
    查找所有目錄文件
    常用的:l 符號連接文件 f 普通文件

    8。-size
    find /etc -size 100k 大小大約在100k的文件
    find /etc -size +100k 大小大于100k的文件
    find /etc -size -100k 大小小于100k的文件


    9。-mount
    只查找本文件系統的文件

    執行
    10。-exec
    find /etc/ -size +100k -exec ls -l {} \;
    查找/etc/下文件大于100k的文件并顯示詳細信息

    錯誤語法:
    find /etc/ -size +100k|ls -l
    只顯示當前目錄信息,無法起到管道服務的作用
    find /etc/ -size +100k -exec ls -l {} (空格)\;(分號)

    11。-ok  和-exec作用一樣,但是在執行前會有確認(yes/no)


    2004-11-08


    s h e l l是從左至右分析相應的命令的


    c r o n t a b的格式:
    分< >時< >日< >月< >星期< >要運行的命令
    其中< >表示空格。

    例如你希望星期一至星期五運行某個作
    業,那么可以在星期域使用1 - 5來表示。還可以在這些域中使用逗號“,”,例如你希望星期一
    和星期四運行某個作業,只需要使用1 , 4來表示??梢杂眯翘?來表示連續的時間段。如果你
    對某個表示時間的域沒有特別的限定,也應該在該域填入*。


    30 21* * * /apps/bin/cleanup.sh
    上面的例子表示每晚的2 1 : 3 0運行/ a p p s / b i n目錄下的c l e a n u p . s h。
    45 4 1,10,22 * * /apps/bin/backup.sh
    上面的例子表示每月1、1 0、2 2日的4 : 4 5運行/ a p p s / b i n目錄下的b a c k u p . s h。
    10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;
    上面的例子表示每周六、周日的1 : 1 0運行一個f i n d命令。
    0,30 18-23 * * * /apps/bin/dbcheck.sh
    上面的例子表示在每天1 8 : 0 0至2 3 : 0 0之間每隔3 0分鐘運行/ a p p s / b i n目錄下的d b c h e c k . s h。
    0 23 * * 6 /apps/bin/qtrend.sh
    上面的例子表示每星期六的11 : 0 0 p m運行/ a p p s / b i n目錄下的q t r e n d . s h。


    c r o n t a b命令的一般形式為:
    Crontab [-u user] -e -l -r
    其中:
    -u 用戶名。
    -e 編輯c r o n t a b文件。
    -l 列出c r o n t a b文件中的內容。
    -r 刪除c r o n t a b文件。

    nohup
    ########################
    如果使用n o h u p命令提交作業,那么在缺省情況下該作業的所有輸出都被重定向到一個名
    為n o h u p . o u t的文件中,除非另外指定了輸出文件:
    nohup command > myout.file 2>&1
    在上面的例子中,輸出被重定向到m y o u t . f i l e文件中

    輸入輸出
    echo #######################
    e c h o命令有很多功能,其中最常用的是下面幾個:
    \c 不換行。
    \f 進紙。
    \t 跳格。
    \n 換行。

    linux 中
    是-n 不換行,使轉義符生效-e


    引號問題
    初涉s h e l l的用戶常常會遇到的一個問題就是如何把雙引號包含到e c h o命令的字符串中。
    引號是一個特殊字符,所以必須要使用反斜杠\來使s h e l l忽略它的特殊含義。假設你希望使用
    e c h o命令輸出這樣的字符串:“/ d e v / r m t 0”,那么我們只要在引號前面加上反斜杠\即可:
    echo "\"/dev/rmt0"\"

    read
    ##########
    我們給出了兩個變量,它們分別被賦予名字和姓氏。s h e l l將用空格作
    為變量之間的分隔符:
    例:
    read name surname
    you hongyu(輸入的內容)
    echo $name $surname
    you hongyu

    ######
    cat
    無分頁功能
    可以合并多個文件

    tee
    #######
    輸出到屏幕的同時 可以輸出到文件

    tee datadel.sh
    -a 是添加輸入到文件


    標準輸入、輸出和錯誤
    當我們在s h e l l中執行命令的時候,每個進程都和三個打開的文件相聯系,并使用文件描
    述符來引用這些文件。由于文件描述符不容易記憶, s h e l l同時也給出了相應的文件名。
    下面就是這些文件描述符及它們通常所對應的文件名:
    文件文件描述符
    輸入文件-標準輸入0
    輸出文件-標準輸出1
    錯誤輸出文件-標準錯誤2
    系統中實際上有1 2個文件描述符,但是正如我們在上表中所看到的, 0、1、2是標準輸入、
    輸出和錯誤。


    例:
    1。cat password 1 >abc.out 和cat password >abc.out是一樣的
    都是把輸出內容到文件abc.out中

    2。>abc.out
    創建空文件

    3. sort <name.txt  >name.cout
    對name.txt排序,通過重定向為s o r t命令指定一個輸出文件n a m e . o u t。
    這樣屏幕上將不會出現任何信息(除了錯誤信息以外):

    4。cat >>youhongyu.txt <<MAYDAY
    abc
    youhongyu
    MAYDAY


    重定向操作符command << delimiter是一種非常有用的命令,通常都被稱為“此處”文擋。
    我們將在本書后面的章節深入討論這一問題?,F在只介紹它的功能。s h e l l將分界符d e l i m i t e r之
    后直至下一個同樣的分界符之前的所有內容都作為輸入,遇到下一個分界符, s h e l l就知道輸
    入結束了。這一命令對于自動或遠程的例程非常有用??梢匀我舛x分界符d e l i m i t e r,最常見
    的是E O F,而我最喜歡用M AY D AY,這完全取決于個人的喜好。還可以在< <后面輸入變量。
    下面給出一個例子,我們創建了一個名為m y f i l e的文件,并在其中使用了T E R M和L O G N A M E
    變量。


    為了重定向標準錯誤,可以指定文件描述符2
    5.grep "youhongyu"  abc.txt 2 >/dev/null
    把錯誤重定向到文件/ d e v / n u l l中(實際就上是系統的垃圾箱):

    6. grep "youhongyu" abc.txt 2 >grep.err
    保存到g r e p . e r r文件中:

    7.grep "youhongyu" abc.txt 1>you.dat 2>you.err
    輸出到you.dat,錯誤信息輸出到you.err


    8. grep "standtard" you.txt >you.out 2>
    g r e p命令的標準輸出和標準錯誤都被重定向到g r e p . o u t文件中。

    命令執行順序
    使用&&
    ################
    使用& &的一般形式為:
    命令1 && 命令2
    這種命令執行方式相當地直接。& &左邊的命令(命令1)返回真(即返回0,成功被執行)
    后,& &右邊的命令(命令2)才能夠被執行;換句話說,“如果這個命令執行成功& &那么執
    行這個命令”。

    例:
    1。mv /bin/apaps /bin/abc/ && rm -r /bin/apaps

    如果/bin/apaps/移動不成功,則不刪除

    使用||
    使用| |的一般形式為:
    命令1 || 命令2
    | |的作用有一些不同。如果| |左邊的命令(命令1)未執行成功,那么就執行| |右邊的命令
    (命令2);或者換句話說,“如果這個命令執行失敗了|| 那么就執行這個命令”。

    sh daily.sh||exit

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>