幾個學習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語句包括模式和動作兩部份。
格式: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'