日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

正则表达式shell

發布時間:2024/9/30 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 正则表达式shell 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://blog.chinaunix.net/uid-26707720-id-3084204.html

正則表達式介紹

?????????使用s h e l l時,從一個文件中抽取多于一個字符串將會很麻煩。例如,在一個文本中抽取一個詞,它的頭兩個字符是大寫的,后面緊跟四個數字。如果不使用某種正則表達式,在s h e l l中將不能實現這個操作。

?????????正則表達式是一種可以用于模式匹配和替換的強大工具,我們可以在很多unix程序中找到正則表達式的身影,例如vi,perl,php,awk,sed,emacs,grep等。

?????????正則表達式常見的應用場合:

1.?????????驗證用戶輸入是否合法,如驗證?“xxx@xxx.xxx”的規則,其中x字符是字母,數字,下劃線,小數點或減號,郵件地址的每一部分可以有一個或多個字符。

2.?????????驗證IP地址是否符合“yyy.yyy.yyy.yyy”的規則,且每個地址段小于255

3.?????????……

基本元字符集及其含義

^

只匹配行首

$

只匹配行尾

*

一個單字符后緊跟*,匹配0個或多個此單字符

[]

匹配[ ]內字符。可以是一個單字符,也可以是字符序列。可以使用-表示[ ]內字符序列范圍,如用[ 1 - 5 ]代替[ 1 2 3 4 5 ]

\

只用來屏蔽一個元字符的特殊含義。因為有時在shell中一些元字符有特殊含義。\可以使其失去應有意義

.

?只匹配任意單字符

p a t t e r n \ { n \ }

只用來匹配前面p a t t e r n出現次數。n為次數

p a t t e r n \ { n,\ }

含義同上,但次數最少為n

p a t t e r n \ { n,m \ }

含義同上,但p a t t e r n出現次數在n與m之間

?


grep

???????相信grep是UNIX和LINUX中使用最廣泛的命令之一。grep(全局正則表達式版本)允許對文本文件進行模式查找。如果找到匹配模式,?grep打印包含模式的所有行。grep支持基本正則表達式,也支持其擴展集。grep有三種變形,即:

???????grep:標準grep命令,集中討論此格式。

???????egrep:擴展grep,支持基本及擴展的正則表達式,但不支持\ q模式范圍的應用,與之相對應的一些更加規范的模式,這里也不予討論。

???????fgrep:快速grep。允許查找字符串而不是一個模式。不要誤解單詞fast,實際上它與grep速度相當。

???????grep一般格式為:

???????grep [選項]?基本正則表達式?[文件]

???????這里基本正則表達式可為字符串。

???????在grep命令中輸入字符串參數時,最好將其用雙引號括起來。例如:“m y s t r i n g”。

???????這樣做有兩個原因:

  • 一是以防被誤解為s h e l l命令;
  • 二是可以用來查找多個單詞組成的字符串。
  • ?????????常用的grep選項有:

    1.???????-c?只輸出匹配行的計數。

    2.???????-i?不區分大小寫(只適用于單字符)。

    3.???????-h?查詢多文件時不顯示文件名。

    4.???????-l?查詢多文件時只輸出包含匹配字符的文件名。

    5.???????-n?顯示匹配行及行號。

    6.???????-s?不顯示不存在或無匹配文本的錯誤信息。

    7.???????-v?顯示不包含匹配文本的所有行

    ???????查詢多個文件

    如果要在當前目錄下所有.c文件中查找字符串“sort”,方法如下:

    grep "sort" *.c

    或在所有文件中查詢單詞“sort it”

    grep "sort it" *

  • 行匹配
  • $ grep -c "12" data

    grep返回數字4,意義是有4行包含字符串“12”。

    現在顯示包含“12”字符串的4行文本:

    ???????行數

    顯示滿足匹配模式的所有行行數:

    grep??-n “13” data

  • 顯示非匹配行
  • 顯示所有不包含13的各行:

    grep??-v “13” data

  • 精確匹配
  • grep??“13<tab>” data????

  • 大小寫敏感
  • grep??-i “sept” data

    ?

    ???????模式范圍

    指定查詢字符串的范圍

    grep??“13[23]” data

    ???????不匹配行首

    grep??“^[^12]” data

    ???????匹配大小寫

    grep??“[Ss]ept” data

    ???????匹配任意字符

    grep??“IBM…” data

    ???????使用grep匹配“與”或者“或”模式

    加參數- E允許使用擴展模式匹配

    grep??-E “1301|1303” data

    ???????匹配特殊字符

    grep “\”” *

    ???????匹配IP地址

    grep “\([0-9]\{1,3\}\.\)\{1,3\}[0-9]\{1,3\}” /etc/sysconfig/network-scripts/*

    awk

    ???????awk命令,要格式化報文或從一個大的文本文件中抽取數據包。

    ???????整體來說,?a w k是所有s h e l l過濾工具中最難掌握

    1.???????復雜的語法

    2.???????含義不明確的錯誤提示信息。

    ???????調用awk

    awk??|-F field-sperator | ‘command’ input-file(s)

  • [ - F域分隔符]?是可選項,a w k使用空格作為缺省的域分隔符;
  • 如瀏覽像passwd這種以”:”分割的文件,需要指定選項:

    ???????awk -F: ‘command’ input-file

  • command是真正的awk命令
  • l???????域參數

    編號(1)???生產日期(2)???產品名稱(3)???價格(4)

    l???????抽取域

    awk ‘{print $1}’ data.txt

    ???????awk?中的?print?命令把輸入文件中選擇的數據輸出。

    ???????當?awk?讀取文件的一行,根據指定的?輸入域分隔符?把行分開,?FS,awk?的一個環境變量。它被預先定義為一個或者多個空格或者制表符。

    ???????變量?$1, $2, $3, ..., $N?把輸入行的第一第二第三直到最后一個域保存起來。變量?$0把整行的值保存起來。在下面的圖片描述中,我們看到?df?命令輸出有6欄。

    ???????df | awk ‘{print $1 "\t\t" $5}’

    ???????打印第一列和第五列,中間用兩個Tab隔開

    ???????域分隔符,既不是一個單獨的字符也不是一個普通的表達式,是控制?awk?把一個輸入分割成幾個域。輸入記錄按分割定義進行字符順序掃描;域就是在相符的那些文字中間的那部分。

    ???????域分隔符代表內建的變量?FS。

    ???????域分隔符變量的值可以在?awk?程序中用賦值操作符?=?來改變。通常最好的執行時間是一開始也就是還沒有處理任何輸入的時候,因此第一個記錄就被隨合適的分隔符一起讀取。使用特殊的BEGIN?。

    ???????awk 'BEGIN { FS=":" } { print $1 "\t" $7 }' /etc/passwd

    ???????awk 'BEGIN { FS=":" } { printf "username:%s\t",$1;printf "home:%s\n",$7}' /etc/passwd

    ???????awk條件操作符

    = =?等于

    !=?不等于

    <?小于

    > =?大于等于

    < =?小于等于

    ~?匹配正則表達式

    !~?不匹配正則表達式

    ???????匹配:

    awk ‘{if($3~/IBM/) print }’ data.txt

    如果第3個域字段包含IBM字符,則打印

  • 精確匹配
  • awk ‘$3==“IBM” {print $0}’ data.txt

  • 小于
  • awk ‘{if($1<“13”) print $0}’ data.txt

    sed命令

    ???????s e d是一個非交互性文本流編輯器。它編輯文件或標準輸入導出的文本拷貝。標準輸入可能是來自鍵盤、文件重定向、字符串或變量,或者是一個管道的文本。

    ???????使用s e d實現的一個重要功能是在另一個系統中下載的文件中剔除控制字符

    ???????使用p(rint)顯示行

    1.???????顯示指定行的內容

    sed??-n '2p'??sed.txt

  • 顯示指定范圍的內容
  • sed??-n '1,3p'??sed.txt

  • 模式查找
  • 匹配字符串worried,并顯示此行的內容。格式/pattern/

    sed??-n '/worried/'p sed.txt

  • …正則表達式
  • ?????????使用d刪除行

    sed??'2d'??sed.txt?刪除sed.txt文件的第二行

    sed??'2,$d'??sed.txt?刪除sed.txt文件第二行到末尾所有行

    sed??'$d'??sed.txt??刪除sed.txt文件的最后一行

    sed '/worried/'d sed.txt??刪除sed.txt文件中所有包含worried的行。

    ?

    思考:?sed??'/^$/d'??sed.txt

    ?????????使用s替換字符(串)

    ??????sed??'s/test/sedtest/g' sed.txt??在整行范圍內把test替換為sedtest

    ??????sed??-n??'s/test/sedtest/p' sed.txt??(-n)選項和p標志一起使用表示只打印那些發生替換的行

    總結

    以上是生活随笔為你收集整理的正则表达式shell的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。