linux之shell之grep,awk,sed

幾個學習shell的中文資料

shell基礎二十篇: http://bbs.chinaunix.net/thread-452942-1-1.html

如何編寫一個shell腳本:http://download.csdn.net/detail/victor0127/4842006

高級Bash腳本編程指南:http://download.csdn.net/detail/victor0127/4842087

 

===========================================================================

1. grep (global search regular expression(RE) and print out the line,全面搜索正則表達式並打印出來),是一種文本搜索工具。

 格式:grep [選項] 正則表達式 inputfile

 作用:匹配正則表達式,搜索

 1.1)grep同時匹配多個模式。

 grep -E "a|b" a.txt ## 能匹配a.txt中包含a或者b的行。基本的grep有很多限制,比如不支持 豎線|,問號?,加號+,小括號(), 大括號{}等,需要加選項                                  ##  -E,相當於egrep。習慣的做法是都加-E。

 1.2)grep精確匹配

 grep -E -w "abc|xyz" a.txt ## -w選項使grep把模式看作一個單詞進行精確匹配,否則"abc|xyz" 能匹配abc, xyz, abcyz, abxyz。

 1.3) 判斷字符串包含關係

 echo "string1"|grep -q "string2"   # greq -q quiet模式,匹配到字符串後返回狀態(0/非0),而不輸出在終端。

 if [ $? -eq 0 ]                                #判斷返回狀態

 then

    echo "string1 包含 string2"

 else

    echo "string1 不包含 string2"

 fi


===========================================================================

2. awk ,Aho、Weinberger、Kernighan三位作者姓名的簡稱。處理文本的編程語言工具,是一種獨立的編程語言。awk語句包括模式和動作兩部份。

wiki

Awk學習筆記

 格式:awk 'commands' inputfile > outfile

 作用:分割域,抽取,匹配正則表達式

 2.1) 在awk語句(正則表達式或動作)中使用外部變量: 使用單引號或先雙再單

      pattern=sunny

      awk '/'"$pattern"'/ {print $2}'    #####對pattern的引用,使用單引號和雙引號,並且先雙再單,即先雙引號"$pattern",再單引號括起來'"$pattern"'

      awk '/'$pattern'/ {print $2}'     ######只用單引號

     又如

       fieldnum=1

       awk '/sunny/ {print '"$fieldnum"'}'  ## 動作語句好像先單再雙,先雙再單,只用單都可以。。

 2.2) 測試某個域是否是空行,如果是空行則刪除(跳過),否則輸出。

     # test內容 

     #price[+2]##for the price it is a well spent investment

      awk -F "##" '{if(length($1)!=0) print $1}' test

 2.3)打印最後一個域的內容

      awk  '{print $NF}'  test###NF, num of fields,域的個數,參見awk內置變量

 2.4)打印所有域的內容

      awk '{print $0}' test

 2.5)分行打印所有的域

      awk '{i=1;while(i<=NF){print $i; i++}}' test ##將test文件內的每一個記錄根據分隔符劃分,每行輸出一個域

 


===========================================================================

3. sed, stream editor,非交互式上下文編輯器,即每次處理一行內容,所有操作在臨時緩衝區完成。

 格式: sed 'commands' input > output

 作用:匹配正則表達式,附加,替換,刪除

 3.1) 從文本中提取指定範圍的行。

      sed -n '1,3p' a.txt   ####打印a.txt的前三行內容到標準輸出

 3.2)刪除行首空格。

      sed 's/^[[:space:]]*//g' a.txt ## sed 's/pattern1/pattern2/g' 將pattern1替換成pattern2,其中s表示替換,g表示將模式2粘貼到模式1

 3.3)刪除空行

      sed '/^$/d' a.txt ##刪除不含任何東西(包括空格,tab)的空行,如果“空行”中包含了空格,tab等非可見內容,可使用sed '/^[[:space:]]*$/d'


grep/awk/sed的強大功能除了本身的優良特性外,很重要的是它們都可以跟shell進行交互編程,可以把它們看作是shell處理文本使用最頻繁的“命令“。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章