cut\grep\awk\sort\sed\head\tail\cat\paste\wc\uniq\diff\patch\tr
第一、
扣取列
1.#cut
-d:
-f 1,3,4 file
選項:-d 定義分隔符
-f 指定扣取的列的位置
#cut
-c0-6 file
選項:-c 定義扣取從開頭算起的6個字符
第二、
截取行
2.#grep
-i -v "
^system" file
選項: -i 表示忽略大小寫
-v 表示不包括
-n 表示顯示結果所在行號
-E 表示支持擴展的正則表達式
^ 表示以“system”開頭
$ 表示以“關鍵字”結尾
^$ 表示空行
. 表示一個任意字符
* 表示前一個字符重復任意次
[] 匹配可能得字符
#grep -Ev '^#
|^$' /etc/postfix/main.cf
關鍵字:以
#開始或(|)空行--------其中 “|” 需要-E 參數的支持
#grep -E [0-9]abc$ :關鍵字表示--以"abc"結尾且之前有一個數字
[0-9]\{11} :關鍵字表示--11位數字
[0-9]{1,3} : 關鍵字表示--1-3位數字
#egrep 是擴展功能的grep
例: egrep '2|5' 1.txt 列出還有2或5的行
egrep '33(2|5)' 1.txt 列出包含33,而且後邊跟的是2或者5的行
#grep 進階
grep -h select * 列出當前目錄下所有包含select關鍵字的行
grep -l select * 列出當前目錄下所有包含select關鍵字的文件名
-----------------------------正則表達式
第三、
文件內容提取
3.#awk -F --------用於文件內容分段提取
如:顯示系統中UID=0的用戶名
#awk -F :
'$3==0{print $1}
'/etc/passwd
如顯示系統中密碼為空的用戶名
#awk -F : 'length($2)==0 {print $1}' /etc/shadow
#awk '{print $9}'
當沒有指定分隔符時,默認以空格分隔,且多個連續空格會認為是一個空格。
查看/etc 目錄中屬主是 root 的文件名稱
# ll /etc | awk '{if ($3=="root") print $9}'
awk
引用變量
# awk '$1== " '$a ' " {print $0} ' file.txt
##########################################
-----需要注意:當用if判斷時 條件在{}中
當不用if判斷是 條件在‘’內,{}外
################################################
條件表達:
awk -F: '{ if ($3>499) print $1}' /etc/passwd
awk -F: '{ if ($3==500) print $1}' /etc/passwd
awk -F: '{ if (length($2)==0) print $1 }' /etc/passwd
awk -F: '{ if ($1=="'$a'") print $1}' /etc/passwd
例:扣取文件名
[root@localhost /]# ll | awk '{print $9}'
----注意:wak中的判斷 “==” 等於 ; “=”賦值
----awk 引用變量(使用選項 -v)
例:
# awk '$1== " '$a ' " {print $0} ' file.txt
#!/bin/bash
read -p "please input the UID :" uid
awk -F : -v ID=$uid ' $3==ID {print $1}' /etc/passwd
第四、
排序
4.#sort -t : -k 3 -nruf file
選項:-t 定義分隔符
-k 指定比較的列的位置
-n 以數值的方式比較 例3 和14 比較:如果有-n 則14>3 ,如果沒有-n,則以字符方式比較3>
1‘4’(比較首字母)
-r 反向排序 默認是升序,即由小到大
-u 刪除重復行 --uniq
-f 排序時忽略大小寫
第五、
統計
5.#wc -l -w file
選項:-l 統計行數
-w 統計單詞數
第六、
比較
6.#diff file1 file2 > patch.txt 生成補丁文件
#patch file1(舊文件) < patch.txt 為老版本文件打補丁
第七、字符替換
7.#tr “原有字符” “目標字符” file
#tr "a-z" “A-Z” file
---------tr 用於單個字符的替換
第八、流文件編輯器---sed(不是交換模式,可用於腳本中的配置文件修改)
語法: sed [選項]
'script' file
-------script 是能夠被sed理解的命令 ,包含:‘<行描述><動作>’
-------file 是cmd進行操作的一些文件
#sed -ire ' s/替換前內容/替換後內容/g' file
選項:
-i 修改源文件並保存。沒有改選項時,修改後內容顯現都屏幕上,但是源文件並沒有改變
-r 支持擴展的正則表達式(用以支持比較復雜的正則表達式)
-e 以選項中指定的script來處理輸入的文本文件(此處的腳本 ” s“)
script 結構 :'行描述[/正則表達式/]動作'
例:刪除 # sed '5d' filename 刪除第5行,顯示其他行
#sed '1,3d' filename 刪除1-3行,顯示其它行
#sed '4,$d' filename 刪除從第4行到末行,顯示其它行
替換 #sed 's/222/333/g' filename 將所有的222取代為333
轉換 #sed '1,3y/[a-z]/[A-Z]/' filename
-------正則表達式
. --用於匹配任意一個字符
* --用於匹配它前面字符的任意多次
^ --用於匹配行首
$ --用於匹配行尾
[char] --用於匹配括號字符集中的某一個字符 []:匹配符 {} :枚舉
[^char] --用於匹配沒有在char字符集中的字符
\ --用於轉義某個特殊含義的字符
\<the\> --用於完整匹配單詞“the”,不會匹配“them”,"there","other"
/^$/ 表示空行
/^.*$/ 表示一整行
/*/ 表示一個或多個空格
[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\} 表示ip地址
--------動作
-s 替換指定內容#sed -e -i 's/defaults/hello/g' /etc/file
-d 刪除指定行 #sed -i -e '1,3d' /etc/file (刪除1--3行)
#sed -e -i '/^#/d' /etc/file (刪除以#開頭的行)
-i 匹配行前插入
-a 匹配行後附加
-c 匹配行替換