學習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 編輯器
- 【Shell】sed xargs grep awk的組合用法
- 指令碼三兄弟 grep、awk、sed指令碼
- numpy的學習筆記\pandas學習筆記筆記
- linux sed學習Linux
- Linux三劍客grep、awk和sedLinux
- Linux awk基礎筆記Linux筆記
- 「分數規劃」學習筆記及做題記錄筆記
- MySQL定時器EVENT學習筆記MySql定時器筆記
- sed、awk——運維必須掌握的兩個工具運維
- linux三劍客(grep、sed、awk)基本使用Linux
- awk 學習總結
- 隨筆-學習程式設計有沒有必要做筆記?如何做筆記?程式設計筆記
- 棧的學習筆記筆記
- Cypress 的學習筆記筆記
- Spring 學習筆記(五)執行時注入Spring筆記
- 學習筆記筆記
- Linux命令之grep/sed/awk等行轉列Linux
- Linux 三劍客 Awk、Sed、Grep 命令詳解Linux
- Linux三劍客Awk、Sed、Grep 命令詳解Linux
- [20200208]awk學習例子.txt
- swoole 學習筆記-做一頓飯來理解協程筆記
- ABB_800xA學習筆記314:做一個實際的練習1筆記
- Android學習筆記--基於XMPP的即時通訊Android筆記
- 機器學習整合學習—Apple的學習筆記機器學習APP筆記
- 【學習筆記】初次學習斜率最佳化的程式碼及筆記筆記
- 【學習筆記】數學筆記
- 學習JavaScript的原型筆記JavaScript原型筆記
- addEventListener(自己的學習筆記)dev筆記
- 最近的學習筆記YBTOJ筆記
- Cris 的 Docker 學習筆記Docker筆記
- React Hooks的學習筆記ReactHook筆記
- 中斷的學習筆記筆記
- Elasticsearch的配置學習筆記Elasticsearch筆記
- 《JAVA學習指南》學習筆記Java筆記
- 機器學習學習筆記機器學習筆記
- 深度學習——loss函式的學習筆記深度學習函式筆記
- 寶付揭秘Linux支付命令操作之grep、sed、awkLinux
- shell指令碼專題-----cat,find,grep,awk,sed(五)指令碼