10 文本分析處理命令
- 2020 年 8 月 9 日
- 筆記
cut:顯示切割的行數據
-f: 選擇顯示的列
-s: 不顯示沒有分隔符的行
-d:自定義分隔符
sort:排序文件的行
-n: 按數值排序
-r:倒序
-t:自定義分隔符
-k:選擇排序列
-u:合併相同行
-f:忽略大小寫
wc:統計單詞,word count
sed:行編輯器 –(vi:全螢幕編輯器)
sed [options] ‘Address Command’ file …
[options]
-n 靜默模式,不再默認顯示模式空間中的內容
-i 直接修改原文件
-e SCRIPT 可以同時執行多個腳本
-f /PATH/TO/SED_SCRIPT
-r 表示使用擴展正則表達式
Command
d 刪除符合條件的行
p 複製符合條件的行
a \string 在指定的行後面追加新行,內容為string。\n可以用於換行
i \string 在指定的行前面添加新行,內容為string。
r FILE 將指定的文件的內容添加至符合條件的行處
w FILE 將地址指定的範圍內的行另存至指定的文件中
s/pattern/string/修飾符 查找並替換,默認只替換每行中第一次被模式匹配到的字元串
g:行內全局替換
i:忽略字元大小寫
s///:s###,s@@@
\(\),\1,\2
Address
可以沒有
給定範圍
查找指定行/str/
num=88
sed “s/\(IPADDR=\(\([0-9]\|[1-9][0-9]\|1[0-9][0-9]\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\).*/\1$num/” -i ifcfg-eth0
awk文本分析工具
awk是一個強大的文本分析工具。
相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤為強大。
簡單來說awk就是把文件逐行的讀入,空格,製表符為默認分隔符,將每行切片,切開的部分再進行各種分析處理。
awk -F‘{pattern+action}’ {filenames}
支援自定義分隔符
支援正則表達式匹配
支援自定義變數,數組 a[1] a[Tom] map(key)
支援內置變數
》》ARGC 命令行參數個數
》》ARGV 命令行參數排列
》》ENVIRON 支援隊列中系統環境變數的使用
》》FILENAME awk瀏覽的文件名字
》》FNR 瀏覽文件的記錄數
》》FS 設置輸入域分隔符,等價於命令行 -F選項
》》NF 瀏覽記錄的域的個數
》》NR 已讀的記錄數
》》OFS 輸出域分隔符
》》ORS 輸出記錄分隔符
》》RS 控制記錄分隔符
支援函數
print split substr sub gsub
支援流程式控制制語句,類C語言
if while do/while for break continue
只是顯示/etc/passwd的賬戶:(可以使用cut)
awk -F’:’ ‘{print $1 }’ passwd
只是顯示 etc/passwd的賬戶和賬戶對應的shell,而賬戶與shell之間以製表符分割,而且在所有行開始前添加列明name shell,在最後一行添加「blue /bin/nosh」 (可以使用cut,sed)
awk -F’:’ ‘{print $1 “\t” $7}’ passwd
awk -F’:’ ‘BEGIN{ print “name\tshell”}{print $1 “\t” $7}END{print “blue\t/bin/nosh”}’ passwd
搜索/etc/passwd有root關鍵字的所有行
awk ‘/root/ {print $0}’ passwd
統計/etc/passwd文件中,每行的行號,每行的列數,對應的完整行內容
awk -F’:’ ‘{print NR “\t” NF “\t” $0}’ passwd
Tom 0 2012-12-11 car 3000
John 1 2013-01-13 bike 1000
vivi 1 2013-01-18 car 2800
Tom 0 2013-01-20 car 2500
John 1 2013-01-28 bike 3500