文本處理工具
- 一.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檔案

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次
練習腳本:
請顯示系統中能被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 顯示以#開頭的行
d 删除
sed 5d westos 删除第五行
sed '/^#/d' fstab 把#開頭的行删除
sed '/^UUID/!d' fstab 除了UUID以外的行都删除
sed -e '5,$d' westos
a 添加 添加是在目前行之後
sed -e '$a hello world' fstab
sed -e '$a hello\nworld' fstab
sed -e '/^#/a hello world' fstab
c 替換
sed -e '/^#/c hello world' fstab
sed '5chello world' westos
w 把符合的行寫到指定檔案中
sed '/^UUID/w westofile' westos 把westos中UUID開頭的行寫入westosfile中
i 插入
sed '5ihello westos' westos 插入是在目前行之前
r 整合檔案 可整合入檔案内容
sed '5r haha' westos
linux檔案内容為:world
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
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字元串
/bash$/ 條件
/條件1|條件2/ 條件1或者條件2
/條件1/||/條件2/ 條件1或者條件2
/條件1/&&/條件2/ 條件1并且條件2
$0 所有的列
$1 第一列
$2 第二列
$3 第三列
#/etc/passwd檔案的第六列沒有home關鍵字并且以bash結尾的行
awk -F : '$6!~/home/&&/bash$/{print}' /etc/passwd
課後練習:
統計在系統中能su切換的并且使用者加目錄不在/home下的使用者數量