如何對sed 和 awk進(jìn)行基本的運(yùn)用
sed命令
sed本身也是個(gè)管道命令,可以將數(shù)據(jù)進(jìn)行替換,刪除,新增,選取特定行等功能。
sed [-nefr] [動(dòng)作]
參數(shù)
?-n: 使用安靜模式,在一般的sed用法中,所有STDIN的數(shù)據(jù)都會(huì)列出到屏幕上,但是加上-n只有sed特殊處理的那一行才會(huì)顯示
?-e:直接在命令模式上進(jìn)行sed的動(dòng)作編輯
?-f:直接將sed的動(dòng)作寫在一個(gè)文件內(nèi), -f filename 則可以執(zhí)行filename內(nèi)的sed動(dòng)作
?-r:sed的動(dòng)作支持?jǐn)U展正則表達(dá)式的語法
?-i:直接修改讀取的文件的內(nèi)容,而不是由屏幕輸出。
動(dòng)作說明:
[n1,[n2]] function
function的參數(shù):
a:后面可以接字符串,這些字符串會(huì)出現(xiàn)在新的一行,目前的下一行
c:替換,替換n1:n2之間的行
d:刪除
i:插入,出現(xiàn)在目前的上一行,和a相反。
p:打印
s:替換可以直接接替換的工作,通常這個(gè)s的動(dòng)作可以搭配正則表達(dá)式,例如 1,20s/old/new/g
看命令猜測意思:
nl a.txt | sed '2,5d' 打印passwd內(nèi)容,顯示行號,刪除2到5行。
nl a.txt| sed '2a drink tea ' 在第二行后(第三行)加drink tea?
插入多行:
每一行都要以 ‘’結(jié)尾是關(guān)鍵
顯示特定的行
將2到4的內(nèi)容替換為no number
這是在文本最后一行 加入 文本
替換最后的d 為hello
awk
awk 是數(shù)據(jù)處理工具,sed 是常常對一行進(jìn)行處理,但是awk經(jīng)常是對一行里面分成字段來處理。
運(yùn)行模式:awk '條件類型1{動(dòng)作1}條件類型2{動(dòng)作2}}...‘ filename
awk主要是處理每一行的字段內(nèi)的數(shù)據(jù),默認(rèn)的字段的分隔符為空格鍵,或者tab鍵。
選取第一列和第三列
操作順序是:
讀入第一行,并將第一行的數(shù)據(jù)填入$0,$1,$2 . ? $0代表的是第一行數(shù)據(jù)的意思
依據(jù)條件類型的限制,判斷是否需要進(jìn)行后面的操作
做完所有的動(dòng)作與條件類型
若還有后續(xù)的行的數(shù)據(jù),會(huì)重復(fù)1-3的步驟,直道所有的數(shù)據(jù)都會(huì)讀完。
判斷行和列的變量
NF:每一行$0擁有的字段總數(shù)
NR:目前awk所處理的是第幾行數(shù)據(jù)
FS:目前分隔符,默認(rèn)是空格鍵
這些都是內(nèi)置變量。
awk的后續(xù)動(dòng)作是 單引號括住的,所以動(dòng)作里面的print要打印是包含非變量部分用 雙引號定義出來。
awk也有一些邏輯運(yùn)算符,和C語言一樣。
第三段是UID,選擇第三列10以下的數(shù)據(jù),并且僅僅列出帳號和第三列。第三列是UID
上面沒有顯示第一個(gè),因?yàn)槟J(rèn)的情況下還是以空格或者tab分開的,所以這個(gè)用了BEGIN 關(guān)鍵字
awk的統(tǒng)計(jì)功能,利用了內(nèi)置變量NR 判斷