學習sed & awk時做的筆記
那陣子在moto做專案,利用間隙看完了一本o'reilly公司的sed&awk介紹,作了一些筆記。巧的是所學的一些東西在專案後期居然用到非常多,呵呵
[@more@]1. 關於過濾字串問題
比如在一個文字中搜尋abcd這四個字元,使用grep 結果出來abcdef 、zabcd 、abcd 、 hiabcd.... 等等,其實只想搜尋abcd
A: 使用精確匹配 $grep " " filename
比如在一個文字中搜尋abcd這四個字元,使用grep 結果出來abcdef 、zabcd 、abcd 、 hiabcd.... 等等,其實只想搜尋abcd
A: 使用精確匹配 $grep "
2. sed中查詢模式匹配:
. 單字元萬用字元
[0-9] 匹配0,1,2,3...8,9
[a-z] 匹配a,b,c...z
[^0-9] 匹配不含0,1,2...9的所有其他字元
".*" 匹配""內任何字串
^ 行開始標誌
$ 行結束標誌
. 單字元萬用字元
[0-9] 匹配0,1,2,3...8,9
[a-z] 匹配a,b,c...z
[^0-9] 匹配不含0,1,2...9的所有其他字元
".*" 匹配""內任何字串
^ 行開始標誌
$ 行結束標誌
3. sed中用bbb替換同一行中包括字串and的字串aaa,而不是每一行中的字串aaa
A: $sed -e '/and/s/aaa/bbb/' filename
A: $sed -e '/and/s/aaa/bbb/' filename
4. sed刪除檔案filename中的所有行
A: $sed d filename
A: $sed d filename
5. sed刪除檔案filename中的2至5行
A: $sed 2,5d filename
A: $sed 2,5d filename
6. sed刪除檔案filename中包含字串abc的所有行
A: $sed /abc/d filename
A: $sed /abc/d filename
7. A regular expression can use "n" to match an embeded newline
8. The regular expression can be delimited by any character except a blank or a newline
EX: s!/usr/mail!/usr2/mail!
Note that the delimiter appears three times and is required after the replacement "/usr2/mail"
EX: s!/usr/mail!/usr2/mail!
Note that the delimiter appears three times and is required after the replacement "/usr2/mail"
9. SED Insert: [line-address]i
sed '/ /i
4700 cross court
French Lick, IN' filename
Desc: inserts two lines of text at a line matching " "
10. SED Append: [line-address]a
sed '$a
Append a new line ' filename
DESC: append a new line in the end of filename
11. SED Change: [line-address]c
sed '/100/c
one hundred' filename
DESC: change the whole lines containing '100' into 'one hundred'
sed '/
4700 cross court
French Lick, IN' filename
Desc: inserts two lines of text at a line matching "
10. SED Append: [line-address]a
sed '$a
Append a new line ' filename
DESC: append a new line in the end of filename
11. SED Change: [line-address]c
sed '/100/c
one hundred' filename
DESC: change the whole lines containing '100' into 'one hundred'
12. 用SED顯示TAB等特殊字元: l
sed -n -e "l" test1
NOTE:顯示test1檔案的內容,包括TAB等特殊字元。-n過濾重複行
sed -n -e "l" test1
NOTE:顯示test1檔案的內容,包括TAB等特殊字元。-n過濾重複行
13. SED n:下一行/next p:顯示/print
$ sed -n -e '/James/{
> n
> p
> }' filename
DESC: 顯示filename中含有James字串的下一行
$ sed -n -e '/James/{
> n
> p
> }' filename
DESC: 顯示filename中含有James字串的下一行
14. SED q: quit
$sed '100q' filename
DESC: print the first 100 lines from filename
15. SED y: transform
/.*/y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
DESC:replace all the characters into capital
16. convert file 'filename' from 1 to 2
2 1
11 22
22 11
111 222
222 111
$ sed '/1/{
> h
> d
> }
> /2/{
> G
> }' filename
h/H: Hold, copy or append contents of pattern space to hold space
g/G: Get, copy or append contents of hold space to pattern space
x: Exchange, swap contents of hold space and pattern space
17. AWK中的特殊字元
a alert character, usually ASCII BEL character
b backspace
f formfeed
n newline
r carriage return
t horizontal tab
v vertical tab
c any literal character c
$sed '100q' filename
DESC: print the first 100 lines from filename
15. SED y: transform
/.*/y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
DESC:replace all the characters into capital
16. convert file 'filename' from 1 to 2
2 1
11 22
22 11
111 222
222 111
$ sed '/1/{
> h
> d
> }
> /2/{
> G
> }' filename
h/H: Hold, copy or append contents of pattern space to hold space
g/G: Get, copy or append contents of hold space to pattern space
x: Exchange, swap contents of hold space and pattern space
17. AWK中的特殊字元
a alert character, usually ASCII BEL character
b backspace
f formfeed
n newline
r carriage return
t horizontal tab
v vertical tab
c any literal character c
18. AWD系統變數
FS field separator
NR the number of current input record
FILENAME the name of current input file
RS the record separator, as a newline
NF the number of fields for the current record
FS field separator
NR the number of current input record
FILENAME the name of current input file
RS the record separator, as a newline
NF the number of fields for the current record
EXAMPLE awkcmd 列出各紀錄平均值,並標出行號,最後顯示檔名和記錄數:
#list the avg scores and row numbers
BEGIN { FS=" " }
{ print NR,".",$1,",",($2+$3+$4)/3 }
END { print
print "File " FILENAME " has " NR " rows " }
$awk -f awkcmd sourcefile
#list the avg scores and row numbers
BEGIN { FS=" " }
{ print NR,".",$1,",",($2+$3+$4)/3 }
END { print
print "File " FILENAME " has " NR " rows " }
$awk -f awkcmd sourcefile
19. #將多行的塊紀錄轉成單行紀錄
BEGIN { FS="n"; RS="" }
{ print $1, $NF }
20. 顯示當前目錄下各檔名和大小的例子
ls -lR|awk '
BEGIN {print " size"," ", "filename"}
NF==9 && /^-/ { #9列並以-開頭表示檔案
filesize += $5
++filenum
print " file ", $5," ",$9
}
NF==9 && /^d/ { #9列並以d開頭表示子目錄
print "", "t", $9
}
$1 ~ /^..*:$/ { # ~: Match Operator
#ls -lR中子目錄顯示為 ./subdir: 以"."開頭"$"結尾的行判斷為子目錄的行
print "t" $0
}
END { print "Total: ", filesize, " bytes (", filenum, " files)"} '
21. AWK傳遞引數和檢索資料
$ cat awk_par
awk '$2==search' search=$1 srcfile
執行:
$ awk_par par_val
DESC: 引數par_val傳遞給變數search,顯示srcfile中第二列為par_val的記錄行
22. AWK中將shell引數傳遞給awk
search=$1
awk '$2 ~ /'"${search}"'/' srcfile
DESC: 將shell的第一個引數傳遞給變數search,同srcfile中第二列比較
如果改成 awk '$2 ~ /'"${search:-.*}"'/' srcfile,則如果shell執行時無引數$1,就顯示所有記錄
BEGIN { FS="n"; RS="" }
{ print $1, $NF }
20. 顯示當前目錄下各檔名和大小的例子
ls -lR|awk '
BEGIN {print " size"," ", "filename"}
NF==9 && /^-/ { #9列並以-開頭表示檔案
filesize += $5
++filenum
print " file ", $5," ",$9
}
NF==9 && /^d/ { #9列並以d開頭表示子目錄
print "
}
$1 ~ /^..*:$/ { # ~: Match Operator
#ls -lR中子目錄顯示為 ./subdir: 以"."開頭"$"結尾的行判斷為子目錄的行
print "t" $0
}
END { print "Total: ", filesize, " bytes (", filenum, " files)"} '
21. AWK傳遞引數和檢索資料
$ cat awk_par
awk '$2==search' search=$1 srcfile
執行:
$ awk_par par_val
DESC: 引數par_val傳遞給變數search,顯示srcfile中第二列為par_val的記錄行
22. AWK中將shell引數傳遞給awk
search=$1
awk '$2 ~ /'"${search}"'/' srcfile
DESC: 將shell的第一個引數傳遞給變數search,同srcfile中第二列比較
如果改成 awk '$2 ~ /'"${search:-.*}"'/' srcfile,則如果shell執行時無引數$1,就顯示所有記錄
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/207/viewspace-778460/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 《sed & awk》讀書筆記之 awk 篇筆記
- SED 學習筆記筆記
- sed學習筆記筆記
- 【shell筆記>命令】grep,sed,awk筆記
- AWK 學習筆記筆記
- sed學習筆記(轉)筆記
- Sed&awk筆記之awk篇:快速瞭解Awk(一)筆記
- sed 學習筆記(與大家共勉)(轉)筆記
- 如何做筆記/如何學習:筆記
- awk學習筆記(15)-數學函式及隨機數筆記函式隨機
- [linux]sed與awkLinux
- awk sed 用法詳解
- numpy的學習筆記\pandas學習筆記筆記
- AWK 學習
- shell 中 grep、sed、awk 命令
- 學會做筆記筆記
- linux awk sed grep awk 求和平均最大最小Linux
- 「分數規劃」學習筆記及做題記錄筆記
- 指令碼三兄弟 grep、awk、sed指令碼
- Shell字元操作命令——grep、sed、awk字元
- 【Shell】sed xargs grep awk的組合用法
- MySQL定時器EVENT學習筆記MySql定時器筆記
- Shell學習筆記_時間計算筆記
- 學習筆記-----一時間函式筆記函式
- linux sed學習Linux
- 隨筆-學習程式設計有沒有必要做筆記?如何做筆記?程式設計筆記
- Awk和Sed格式化Hive的資料Hive
- grep、sed、awk、head、tail、gsub、subAI
- awk 學習總結
- 棧的學習筆記筆記
- Cypress 的學習筆記筆記
- Git的學習筆記Git筆記
- MongoDB的學習筆記MongoDB筆記
- IT學習筆記筆記
- 學習筆記筆記
- swoole 學習筆記-做一頓飯來理解協程筆記
- sed、awk——運維必須掌握的兩個工具運維
- Linux awk基礎筆記Linux筆記