系統城裝機大師 - 唯一官網:www.farandoo.com!

當前位置:首頁 > 系統教程 > Linux教程 > 詳細頁面

系統城u盤重裝系統大師教小白Linux運維shell文本處理工具grep sed swk操作示例

時間:2021-11-25來源:www.farandoo.com作者:電腦系統城

一、grep

文本搜索工具,可以使用正則表達式搜索文本,把匹配的行打印出來

  • grep支持正則表達式
  • egrep支持擴展的正則表達式
  • grep -Eegrep

1、grep的格式

grep 匹配條件 處理文

   
-i 忽略大小寫
-E “\<root" root字符之前不能有字符
-E ”root\>“ root字符之后不能有字符
-數字 顯示過濾行以及上面幾行和下面幾行
-n 顯示匹配的行所在行號
-A 顯示過濾行以及下面幾行
-B 顯示過濾行以及上面幾行
-v 反向過濾

建立實驗素材:

1
2
3
grep -E "bash$|nologin$" passwd  ##過濾以bash結尾或nologin結尾的行
grep -i root passwd  ##過濾含root關鍵字的行,不分大小寫
grep -iE "\<root\>" passwd  ##過濾root關鍵字前后都沒有字符的行,不分大小寫

1
2
3
grep -1 ROOT passwd  ##顯示含root的行,以及上下各一行
grep -A 2 -B 1 -n ROOT passwd  ##顯示含root的行,以及上1行,下2行,均顯示行號
grep root passwd | grep -E "^root" -v  ##顯示root在結尾或中間的行,即反向過濾root在開頭

2、grep字符數量匹配規則

   
^root 以root開頭
root$ 以root結尾
s...k s開頭k結尾中間任意3個字符
....k k結尾前后4個任意字符
* 字符出現任意
? 0到1次
+ 1到任意次
{n} n次
{m,n} m到n次
{0,n} 0-n次
{,n} 0-n次
{m,} 最少m次
(skk){6} skk字符串出現6次

建立實驗素材:

1
2
3
grep -E 's.{2,4}s' grepfile  ##s和s之間有2到4個任意字符
grep -E 's.?s' grepfile  ##s和s之間有0到1個任意字符
grep -E 's(ks){2,}' grepfile  ##s后面ks字符串最少出現2次

3、示例

請顯示系統中能被su命令切換的用戶名稱
能被su切換,則必須以/bin/bash/bin/sh結尾

1 grep -E "/bin/bash$|/bin/sh$" /etc/passwd | cut -d : -f 1

二、sed

1、sed的格式

sed 參數 命令 處理對象

-e:當給出多個sed指令時使用
-f:后面跟保存了sed指令的文件
-i:直接對內容修改,不加-i時默認為預覽,不對文件做實際修改
-n:取消靜默輸出,sed默認會輸出所有文本內容,使用-n后只顯示處理過的行

2、對字符的處理

建立實驗素材:

p:顯示

   
-n 5p 顯示第5行
-n 3,5p 顯示3到5行
-n ”3p;5p“ 顯示3和5行
-ne 1,5p 顯示1-5行
-ne '5,$p' 顯示5到最后行
-n '/^#/p' 顯示以#開頭的行

d:刪除

   
5d 刪除第五行
'/^#/d' 把#開頭的行刪除
'/^UUID/!d' 除了UUID開頭以外的行都刪除
-e '5,$d' 刪除5到最后一行

a:添加,c:替換

   
-e '$a hello world' 最后一行后添加
-e '5a hello\nworld' 第5行后添加換行的內容
-e '/^#/a hello world' 在以#開頭的行后面添加
   
-e '/^#/c hello world' 替換以#開頭的行
'5chello world' 替換第5行

w:把符合的行寫到指定文件中,i:插入,r:整合文件

   
'/^root/w linuxfile' 把文件中root開頭的行寫入linuxfile中
   
'5ihello linux' 第5行前插入內容
   
'5r haha' 把haha文件的內容整合到第5行之后

3、字符替換

建立實驗素材:

1
2
3
4
5
6
7
8
9
10
11
12
13
sed '=' passwd  ##每一行前面加行號
sed '=' passwd | sed 'N;s/\n/ /g'  ##將換行符轉換為空格(sed是逐行檢測的,加入N提前加載處理下一行)
sed 'G' passwd  ##每行后面都加一個空行
sed '$G' passwd  ##給最后一行后加空行
sed '$!G' passwd  ##除了最后一行在后面都加空行
sed 's/:/#/g' passwd  ##將全文的:替換為#,s全文,g每行的全部
sed 's/:/#/' passwd  ##只替換每行的第一個
sed '1s/:/%%%/g' passwd  ##第一行替換
sed '1,5s/:/%%%/g' passwd ##替換1到5行
sed '1s/:/%%%/g;5s/:/%%%/g' passwd  ##替換第1行和第5行
sed '/mail/,/ftp/s/:/%%%/g' passwd  ##指定字符間替換
sed 's/\//%%%/g' passwd  ##替換全文的"/","\"為轉義字符
sed 's@/@%%%@g'  ##也可以使用“@”代替“/”

4、示例

編寫Apache_port.sh,此腳本后接數字,http的端口就改為此數字,假設selinux為關閉狀態

例如:

sh Apache_port.sh
ERROR: Pleaase input port number following script !!
sh Apache_port.sh 8080

apache的端口會被修改為8080,在其他主機可以訪問到測試頁面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vim Apache_port.sh
#!/bin/bash
yum install httpd -y &> /dev/null
systemctl enable --now httpd &> /dev/null
echo "hello linux" > /var/www/html/index.html
systemctl enable --now firewalld &> /dev/null
[ -z $1 ] && {
        echo "ERROR: Pleaase input port number following script !!"
        exit
}
[ -z "`netstat -antlupe | grep -E ":$1\>"`" ] || {
        echo "Error: $1 is using !!!"
        exit
}
sed "/^Listen/c Listen $1" -i /etc/httpd/conf/httpd.conf
systemctl restart httpd
firewall-cmd --permanent --add-service=http &> /dev/null
firewall-cmd --reload &> /dev/null
echo "Change $1 sucessful!!"

三、awk

1、awk的格式

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

   
NR 行數
NF 列數
FILENAME 文件名稱本身
   
linux linux變量值
“linux” linux字符串
   
/bash$/ 條件
/條件1|條件2/ 條件1或者條件2
/條件1/||/條件2/ 條件1或者條件2
/條件1/&&/條件2/ 條件1并且條件2
   
$0 所有的列
$1 第1列
$2 第2列
$3 第3列

建立實驗素材:

1、在passwd文件開始加上hello,結尾加上end,打印第一列

1 awk -F : 'BEGIN{print "hello"}{print $1}END{print "end"}' passwd

2、統計文件行數,顯示以bash結尾的第一列

1
2
awk -F : 'BEGIN{N=0}{N++}END{print N}' passwd0
awk -F : '/bash$/{print $1}' passwd

3、第六列沒有root關鍵字并且以bash結尾的行,顯示第一列

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

2、示例

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

(1)方法一

1 awk -F : '$6!~/^\/home/&&/bash$/{print $1}' /etc/passwd | wc -l

(2)方法二

1 awk -F : 'BEGIN{N=0}$6!~/^\/home/&&/bash$|sh$/{N++}END{print N}' /etc/passwd

以上就是Linux運維shell文本處理工具grep sed swk操作示例的詳細內容

分享到:

相關信息

  • 電腦系統城教小白linux操作系統安裝步驟詳細

    很多網友對于linux系統比較陌生,更別說linux系統安裝了。有使用筆記本電腦的網友需要用到linux系統,不過卻不知道怎么安裝,所以下面小編要來跟大家說說linux操作系統安裝步驟詳細,大家一起來看看吧。...

    2022-03-07

  • 紅旗Red Flag安裝全程圖解 RedFlag紅旗Linux系統怎么安裝?

    RedFlag紅旗Linux系統怎么安裝?電腦想要安裝雙系統,該怎么安裝RedFlag紅旗系統呢?下面我們就來看看紅旗Red Flag安裝全程圖解,詳細請看下文介紹...

    2022-01-23

系統教程欄目

欄目熱門教程

人氣教程排行

站長推薦

熱門系統下載

jlzzjlzz亚洲乱熟在线播放