天天看點

linux學習筆記-Shell(二):文本處理工具一.grep三.awk

文本處理工具

  • 一.grep
        • 2.sed
  • 三.awk

一.grep

[Globally search a Regular Expression and Print]

grep

grep -E = egrep

grep 格式

grep 比對條件 處理檔案

grep root passwd              過濾root關鍵字
grep -i root passwd           忽略大小寫
grep -E "\<root" passwd       root字元之前不能有字元
grep -E "root\>" passwd       root字元之後不能有字元
grep -數字                    顯示過濾行以及上面幾行和下面幾行
grep -n                       顯示比對的行所在行号
grep -A                       顯示過濾行以及下面幾行
grep -B                       顯示過濾行以及上面幾行
grep -v                       反向過濾
           

passwd檔案

linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk

grep字元數量比對規則

^westos                       以westos開有
westos$                       以westos結尾
w....s                        w開頭s結尾中間4個任意字元
.....s                        s結尾前面5個任意字元
*                             字元出現任意
?                             0到1次
+                             1次到任意次
{n}                           n次
{m,n}                         m到n次
{0,n}                         0-n次
{,n}                          0-n次
{m,}                          最少m次
(lee){2}                      lee字元串出現2次
           
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk

練習腳本:

請顯示系統中能被su指令切換的使用者名稱

2.sed

指令格式:

sed 參數 指令 處理對象

sed 參數 處理對象 -f 處理規則檔案

對字元的處理

p  顯示
sed -n 5p westos         顯示第五行
sed -n 3,5p westos       顯示3到5行
sed -ne "3p;5p westos    顯示3和5行
sed -ne 1,5p westos      1-5行
sed -ne '5,$p' westos    5到最後一行
sed -n '/^#/p' fstab     顯示以#開頭的行
           
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
d  删除
sed 5d westos            删除第五行
sed '/^#/d' fstab        把#開頭的行删除
sed '/^UUID/!d' fstab    除了UUID以外的行都删除
sed -e '5,$d' westos
           
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
a 添加   添加是在目前行之後
sed -e '$a hello world' fstab
sed -e '$a hello\nworld' fstab
sed -e '/^#/a hello world' fstab
           
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
c 替換
sed -e '/^#/c hello world' fstab
sed '5chello world' westos
           
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
w                                 把符合的行寫到指定檔案中
sed '/^UUID/w westofile' westos   把westos中UUID開頭的行寫入westosfile中
           
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
i  插入
sed '5ihello westos' westos    插入是在目前行之前
           
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
r  整合檔案  可整合入檔案内容
sed '5r haha' westos
           

linux檔案内容為:world

linux學習筆記-Shell(二):文本處理工具一.grep三.awk
sed 字元替換 
sed 's/:/###/g' westos 
sed '1,5s/:/###/g' westos 
sed '1s/:/###/g' westos 
sed '1s/:/###/g;5s/:/###/g' westos 
sed '/lp/,/shutdown/s/:/###/g' westos    含lp或shutdown所在行的:換為###
sed 's/\//####/g' westos 
sed 's@/@####@g' westos 
           
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
sed 's@/@####@g' -i westos 把sed處理的内容儲存到westos檔案中
           

練習及腳本

Apache_port.sh

此腳本接入數字

http的端口就改為此數字

假設selinux為關閉狀态

例如:

sh Apache_port.sh

ERROR: Pleaase input port number following script !!

sh Apache_port.sh 8080

apache的端口會被修改為8080

[ -z  "$1" ]  && {
  echo please input port number following script !!
  exit
}
[ -d "/var/www/html" ] || {
   echo  not exist httpd
} && {
  sed  "45cListen $1"  -i /etc/httpd/conf/httpd.conf
   systemctl stop firewalld
  
           

setenforce 0

systemctl restart httpd

}

三.awk

awk -F 分隔符 BEGIN{}{}END{} FILENAME

NR            行數
NF            列數
FILENAME      檔案名稱本身
westos        westos變量值
“westos”      westos字元串
           
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
/bash$/          條件
/條件1|條件2/     條件1或者條件2
/條件1/||/條件2/  條件1或者條件2
/條件1/&&/條件2/  條件1并且條件2
           
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
$0        所有的列
$1        第一列
$2        第二列
$3        第三列
           
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk
linux學習筆記-Shell(二):文本處理工具一.grep三.awk

#/etc/passwd檔案的第六列沒有home關鍵字并且以bash結尾的行

awk -F : '$6!~/home/&&/bash$/{print}' /etc/passwd
           

課後練習:

統計在系統中能su切換的并且使用者加目錄不在/home下的使用者數量

linux學習筆記-Shell(二):文本處理工具一.grep三.awk