1 grep文字過濾命令
grep中的正規表示式
grep ^root passwd #過濾以root開頭的行
grep root$ passwd #過濾以root結尾的行
grep -i ^root passwd #不區分大小寫,過濾以root開頭的行
grep -e "^root | root$" passwd #過濾以root開頭或root結尾的行,-e表示擴充套件正規表示式
grep -e -v "^root | root$" passwd # -v 表示反向過濾
grep -e -v "^root | root$" passwd |grep root #過濾root在中間的行
grep -i root passwd | grep -v -i -e "^root | root$" #過濾root在中間的行
grep 'r.t' test #過濾r和t之間只有乙個字元
grep 'r..t' test #過濾r和t之間有兩個字元
grep 'r...t' test #過濾r和t之間有三個字元
grep 'r*t' test # 過濾r出現的任意次數
grep 'r\**t' test #過濾r,t之間有0個字元
grep 'ro*t' test #過濾r和t之間o出現的任意次數
grep -e 'ro*t' test #過濾r和t之間o出現的任意次數
grep -e 'ro?t' test #過濾r和t之間o出現的0和1次
grep -e 'rot' test #過濾r和t之間o出現的1次以上
grep -e 'rot' test #過濾r和t之間o出現的3以下的次數
grep -e 'r....' test #過濾r之後出現4個字元
grep -e 'r....\' test#精確匹配
grep -e '\<....r' test #過濾r之前出現4個字元
應用: 編寫指令碼檔案,使輸出可以登入系統的使用者
vim show_loginuser.sh
#!/bin/bash
shell=$(echo `grep -v nologin /etc/shells ` | sed 's//|/g')
grep -e "$shell" /etc/passwd | cut -d : -f l
2 sed 行編輯器
p模式(顯示)
sed -n '^:/p' fstab #顯示fstab中以:開頭的行
sed -n 'uuid$/p' fstab #顯示fstab中以uuid結尾的行
sed -n '/^uuid/p' fstab #顯示fstab中以uuid開頭的行
sed -n '2,6p' fstab #顯示fstab中的第二行和第六行
sed -n '2,6!p' fstab #顯示fstab中除過第二行和第六行其餘的行
d模式(刪除,只是顯示的時候刪除,並不刪除原檔案)
sed '/^uuid/d' fstab #刪除以uuid開頭的行
sed '/^#/d' fstab #刪除以#開頭的行
sed '/^$/d' fstab #刪除以空格開頭的行
sed '/^uuid/!d' fstab #刪除不是以uuid開頭的行
cat -n fstab | sed '1,4d' #刪除1到4行
cat -n fstab | sed -e '2d,6d' #刪除第二行和第六行
a模式(新增,預設在最後一行新增)
sed '/^uuid/a\hello' fstab #在以uuid開頭的行的前一行新增hello
sed '/^uuid/a\hello' \newstos fstab #在以uuid開頭的行的前一行新增hello換行再新增westos
i模式(插入)
sed '/^uuid/i\hello' fstab #在uuid的前一行新增hello
c模式(替換)
sed '/^uuid/c\hello' fstab #把以uuid開頭的行替換成hello
w模式(寫入)
sed '/^uuid/wwestos' fstab
sed -n '/^uuid/wwestos' fstab
sed '/^uuid/=' fstab #顯示以uuid開頭所在的行號
sed '6r westos' fstab
3 awk報告生成器
awk處理機制:awk會逐行處理文字,支援在處理第一行之前做一些準備工作,以及在處理完最後一行,做一些總結性質的工作,在命令格式上分別體現如下:
begin{}:讀入第一行文字之前執行,一般用來初始化操作
{} :逐行處理,逐行讀入文字執行相應的處理,是最常見的編輯指令塊
end{} :處理完最後一行文字之後執行,一般用來輸出處理結果
awk -f ":" '' passwd #以:為分隔符,顯示第一列
awk -f ":" 'begin' passwd #以name開始顯示第一列
awk -f ":" 'beginend' passwd #以name開始,以end結束,顯示第一列並顯示行號
awk -f ":" 'beginend' passwd #顯示行號並換行
awk -f ":" '/bash$/' passwd #sh 結尾的行第一列,$1表示第一列
awk -f ":" 'begin/bash$/end' passwd #統計passwd中以bash結尾的行數
awk -f '/^ro/' passwd #列印以ro開頭的行
awk -f '/^[a-d]/' passwd #列印以a到d開頭的行
awk -f '/^a|nologin$/' passwd #列印以a開頭或者以nologin結尾的行
awk -f ":" '$1~/^r/' passwd#列印以r開頭的行
awk -f ":" '$1!~/^r/' passwd#列印不以r開頭的行
awk -f ":" '' passwd #以:為分隔符列印第一列,並表示行號,$0表示檔案一整行的內容
應用:
1 計算顯示能夠登入系統的使用者個數
awk -f ":" 'begin$5!~/^\/home/&&/bash/end' /etc/passwd
2 找出系統中可以登入系統,但使用者家目錄不在/home下
awk -f ":" '$6!~/^\/home/&&/bash$/' /etc/passwd
3 抓取eth0的網絡卡ip
ifconfig eth0 | awk -f "" '/inet\>/'
4 統計在系統中可以登入系統的使用者
awk -f ":" '$5!~/^\/home/&&/bash/' /etc/passwd
5 統計檔案的行數
awk 'beginend' /etc/passwd
shell文字處理
最於檔案的操作以前都是用高階程式語言來操作的。今天恰好需要將乙個目錄中的檔案資訊儲存到sqlite3資料庫中 我用linux中的工具和shell來作為自己畢業設計做原型開發 下面記錄一下這裡用到的部分知識,以作備忘。用ls命令來說明 1.關於shell中的管道和重定向問題。這個知識基礎,這裡不再說了...
shell 文字處理
最近優化指令碼,將幾套指令碼合併,比如,處理nand手機的指令碼和處理emmc手機的指令碼是不一樣的,這導致我們的指令碼有很多個版本。手機側只有busybox,所以不能使用功能強大的python來處理文字。花了半天時間,發現雖然語法比較怪異,但也能簡潔的完成任務。if e proc emmc the...
shell之文字處理 echo
echo options string option 表示命令選項,只有 n,表示不輸出行尾的換行符。如果要輸出的文字是由多個單子組成的,使用雙引號括起來。echo n what is your first name?要使用 echo 命令支援轉義字元,要使用 e選項。b 退格符 echo e th...