成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Shell—正則表達式(grep命令、sed工具)

系統 Linux
正則表達式對于系統管理員來說是非常重要的,熟練運用正則表達式可使工作變得更加簡單、方便。

 [[352366]]

前言

正則表達式對于系統管理員來說是非常重要的,熟練運用正則表達式可使工作變得更加簡單、方便。

一、正則表達式概述

正則表達式定義

正則表達式,又稱正規表達式、常規表達式

使用字符串來描述、匹配一系列符合某個規則的字符串

簡單來說,是一種匹配字符串的方法,通過一些特殊符號,實現快速查找、刪除、替換某個特定字符串。

正則表達式組成

普通字符:大小寫字母、數字、標點符號及一些其他符號

元字符:在正則表達式中具有特殊意義的專用字符

正則表達式的用途

正則表達式對于系統管理員來說是非常重要的,系統運行過程中會產生大量的信息,這些信息有些是非常重要的,有些則僅是告知的信息。身為系統管理員如果直接看這么多的信息數據,無法快速定位到重要的信息,如“用戶賬號登錄失敗”“服務啟動失敗”等信息。這時可以通過正則表達式快速提取“有問題”的信息。如此一來,可以將運維工作變得更加簡單、方便。

正則表達式分類

基礎正則表達式

擴展正則表達式

Linux中文本處理工具

支持基礎正則表達式:grep;sed

支持擴展正則表達式:egrep;awk

基礎正則表達式元字符

基礎正則表達式是常用的正則表達式部分

除了普通字符外,常見到以下元字符 

  1. ■ \  :轉義字符,\!、 \n等     #讓特殊意義的元字符作普通字符使用  
  2. ■ ^ :匹配字符串開始的位置  
  3. 例: ^a、 ^the、 ^#  
  4. ■ $ :匹配字符串結束的位置  
  5. 例: word$  
  6. ■  . :匹配除\n之外的任意的一個字符  
  7.  例: go.d、 g..d  
  8. ■  * :匹配前面子表達式0次或者多次  
  9.  例: goo*d、 go.*d  
  10. ■ [list] :匹配list列表中的一個字符  
  11.  例: go[ola]d 、[abc]、 [a-z]、 [a-z0-9]  
  12. ■ [^list] :匹配任意不在list列表中的一個字符  
  13.  例: [^a-z]、 [^0-9]、 [^A-Z0-9]  
  14. ■ \{n,m\} :匹配前面的子表達式n到m次,有\{n\}、 \{n,\}、\{n,m\}三種格式  
  15.  例: go\{2\}d、 go\{2,3\}d、 go\{2,\}d  
  16.  注意:“o{1,}” 等價于 “o+”  ;“o{0,}” 則等價于 “o*” 

二、grep 命令

2.1 grep的使用規則:

  •  -n:表示顯示行號
  •  -i :表示不區分大小寫
  •  -v:表示反向過濾
  •  [ ]:查找集合字符

2.2 用法示例 

  1. grep -n 'the' test.txt     #文件檢索出帶‘the’的行并顯示行號  
  2. grep -vn 'the' test.txt   #文件反向檢索出不帶‘the’的行并顯示行號  
  3. grep -n 'sh[oi]rt' test.txt  #文件檢索出帶‘short’或‘shirt‘的行并顯示行號  
  4. grep -n 'oo' test.txt   #文件檢索出至少帶連續oo的行并顯示行號  
  5. grep -n 'o\{2\}' test.txt   #文件檢索出至少帶連續oo的行并顯示行號  
  6. grep -n 'o\{2,\}' test.txt   #文件檢索出至少帶連續oo的行并顯示行號  
  7. grep -n '[^w]oo' test.txt   #文件檢索出連續oo前面不帶w的行并顯示行號  
  8. grep -n '^[^w]oo' test.txt  #文件檢索出除w外,任意*oo開頭的行并顯示行號  
  9. grep -n ' [^a-z]oo ' test.txt  #文件檢索出連續oo前面不是小寫字母的行并顯示行號  
  10. grep -n '[0-9]' test.txt    #文件檢索出包含數字的行并顯示行號  
  11. grep -n '[^0-9]' test.txt  #文件檢索出不包含純數字的行并顯示行號,非純數字也會匹配  
  12. grep -n '[^#]' test.txt   #文件檢索出不包含#的行并顯示行號  
  13. grep -n '^the' test.txt  #文件檢索出以‘the’開頭的行并顯示行號  
  14. grep -n ‘^[a-z] ' test.txt   #文件檢索出以小寫字母開頭的行并顯示行號  
  15. grep -n ‘^[A-Z] ' test.txt   #文件檢索出以大寫字母開頭的行并顯示行號  
  16. grep -n '^[^a-zA-Z]' test.txt   #文件檢索出不以字母開頭的行并顯示行號  
  17. grep -n '\.$' test.txt  #文件檢索出以 . 號結尾的行并顯示行號  
  18. grep -n '^$' test.txt   #文件檢索出空行并顯示行號  
  19. grep -n 'w..d' test.txt  #文件檢索出帶有w開頭,d結尾,中間兩個任意字符的行并顯示行號  
  20. grep -n 'ooo*' test.txt  #文件檢索出帶有連續oo或兩個0以上的行并顯示行號  
  21. grep -n 'oo*' test.txt  #文件檢索出帶有o或一個0以上的行并顯示行號  
  22. grep -n 'w.*d' test.txt   #文件檢索出帶有w開頭,d結尾,中間任意字符也可中間什么也沒有的行并顯示行號  
  23. grep -n '[0-9][0-9]*' test .txt  #文件檢索出帶有數字的行并顯示行號 

三、sed 工具

sed(StreamEDitor)

一個強大而簡單的文本解析轉換工具,可以讀取文本,并根據指定的條件對文本內容進行編輯(刪除、替換、添加、移動等),最后輸出所有行或者僅輸出處理的某些行。

3.1 sed 工具使用規則

sed的工作流程

主要包括讀取、執行和顯示三個過程

讀取: sed從輸入流(文件、管道、標準輸入)中讀取一-行內容并存儲到臨時的緩沖區中(又稱模式空間,pattern space)

執行: 默認情況下,所有的sed命令都在模式空間中順序地執行,除非指定了行的地址,否則sed命令將會在所有的行上依次執行。

顯示: 發送修改后的內容到輸出流。在發送數據后,模式空間將會被清空。在所有的文件內容都被處理完成之前,上述過程將重復執行,直至所有內容被處理完。

注意:默認情況下所有的sed命令都是在模式空間內執行的,因此輸入的文件并不會發生任何變化,除非是用重定向存儲輸出。

sed命令常見用法 

  1. sed [選項] ‘操作’ 參數  
  2. sed [選項] -f scriptfile 參數 

常見的sed命令選項

  •  -e script: 指定sed編輯命令
  •  -f scriptfile: 指定的文件中是sed編輯命令
  •  -h或–help: 顯示幫助
  •  -n、–quiet或silent:表示僅顯示處理后的結果。
  •  -i: 直接編輯文本文件

常見sed命令的操作

  •  a: 增加,在當前行下面增加一行指定內容。
  •  c: 替換,將選定行替換為指定內容。
  •  d: 刪除,刪除選定的行。
  •  i: 插入,在選定行上面插入一行指定內容。
  •  p: 打印,如果同時指定行,表示打印指定行;如果不指定行,則表示打印所有內容;如果有非打印字符,則以ASCII碼輸出。其通常與“-n”選項一起使用。
  •  s: 替換,替換指定字符。
  •  y: 字符轉換。
  •  p:n #奇數行
  •  n:p #偶數行

3.2 用法示例

1、輸出符合條件的文本(p表示正常輸出)

nl test.txt | sed -n ‘p’ #輸出test.txt內容,nl是顯示行號和內容,為的是輸出結果帶上行號 

  1. nl test.txt | sed -n '3p'   #輸出test.txt內容第三行帶行號  
  2. nl test.txt | sed -n '2,5p'   #輸出test.txt內容二到五行帶行號  
  3. nl test.txt | sed -n 'p:n'   #輸出test.txt內容奇數行帶行號,要先刪除空格  
  4. nl test.txt | sed -n 'n:p'   #輸出test.txt內容偶數行帶行號,要先刪除空格  
  5. nl test.txt | sed -n '1,5{p;n}'  #輸出test.txt內容奇數行1~5行帶行號  
  6. nl test.txt | sed -n '1,10{n;p}'  #輸出test.txt內容偶數行1~10行帶行號  
  7. nl test.txt l sed -n '10,${n; p}'  #輸出test.txt內容10行到最后一行的偶數行帶行號  
  8. sed -n '/the/p' test.txt     #輸出test.txt帶the的內容  
  9. grep -n 'the' test.txt   #文件檢索出帶‘the’的行并顯示行號 
  10. nl test.txt | sed -n '4,/the/p'    #輸出test.txt內容4行以后帶‘the’的行帶行號  
  11. sed -n '/the/=' test.txt   #輸出帶‘the’的行的行號  
  12. sed -n '/^PI/p' test.txt     #查找以‘PI’開頭的行輸出  
  13. sed -n '/[0-9]$/p' test.txt   #查找以數字結尾的行輸出  
  14. grep 'wood' test.txt   #查找帶‘wood’的行輸出  
  15. sed -n '/\<wood\>/p' test.txt    #輸出包含‘wood’的行,\< \>代表單詞邊界 

2、刪除符合條件的文本 (d) #只刪除輸出流,不刪除源文件

nl 命令用于計算文件的行數和顯示內容 

  1. nl test.txt | sed '3d'        #刪除文本第三行  
  2. nl test.txt | sed '3,5d'        #刪除文本第三到第五行  
  3. nl test.txt l sed -n '/cross/p'     #查找帶‘cross’的行輸出帶行號  
  4. nl test.txt l sed  '/cross/d'     #刪除帶‘cross’的行  
  5. nl test.txt l sed  '/cross/!d'     #!取反,保留帶‘cross’的行  
  6. sed '/^[a-z]/d' test.txt | nl  #刪除以小寫字母開頭的行,結果顯示行號  
  7. sed '/^[a-z]/d' test.txt     #刪除以小寫字母開頭的行  
  8. sed -n '/\.$/d' test.txt   #刪除以 . 號結尾的行  
  9. sed 'p' test.txt    #所有內容輸出  
  10. sed '/^$/d' test. txt   #刪除空行  
  11. sed '/.$/d' test.txt   #刪除任意字符結尾的行,等于全刪 

3、替換符合條件的文本

使用 sed 命令進行替換操作時需要用到 s (字符串替換);c (整行/整塊替換);y (字符轉換) 命令選項 

  1. sed 's/the/THE/' test.txt    #將每行中的第一個the替換為THE  
  2. sed 's/1/L/2' test.txt    #將每行中的第2個1替換為L  
  3. sed 's/the/THE/g' test.txt     #將文件中的所有the替換為THE  
  4. sed 's/o//g' test.txt     #將文件中的所有o刪除(替換為空串)  
  5. sed 's/^/#' test.txt      #在每行行首插入#號  
  6. sed '/the/s/^/#/' test.txt    #在包含the 的每行行首插入#號  
  7. sed 's/$/EOF/' test.txt    #在每行行尾插入字符串 EOF  
  8. sed '3,5s/the/THE/g' test.txt    #將第3~5 行中的所有the替換為 THE  
  9. sed '/the/s/o/0/g'test.txt    #將包含the的所有行中的o都替換為O 

4、遷移符合條件的文本

在使用sed 命令遷移符合條件的文本時,常用到以下參數:

  •  H:復制到剪貼板;
  •  g、G:將剪貼板中的數據覆蓋/追加至指定行
  •  w :保存為文件
  •  r :讀取指定文件
  •  a:追加指定內容。 
  1. sed '/the/{H; d};$G' test.txt     #將包含the 的行遷移至文件末尾,{;}用于多個操作  
  2. sed '1,5 {H; d};17G' test.txt   #將第1~5 行內容轉移至第17行后  
  3. sed '/the/w out.file' test.txt    #將包含the 的行另存為文件 out.file  
  4. sed '/the/r /etc/hostname' test.txt   #將文件/etc/hostname 的內容添加到包含 the 的每行以后  
  5. sed '3aNew' test.txt   #在第3行后插入一個新行,內容為New  
  6. sed '/the/aNew' test.txt   #在包含the的每行后插入一個新行,內容為New  
  7. sed '3aNew1\nNew2' test.txt  #在第3行后插入多行內容,中間的\n表示換行  
  8. 注:\n和\r的區別:  
  9. \n:換行符  是另起一新行  
  10. \r :回車符  光標回到一舊行的開頭; 

5、使用腳本編輯文件

使用sed腳本將多個編輯指令存放到文件中(每行一條編輯指令),通過“-f”選項來調用。 

  1. [root@client2 ~]# vi opt.list    #建立一個文件  
  2. 5H       #文件內是sed的操作  
  3. 5d  
  4. 16G  
  5. [root@client2 ~]# sed -f opt.list test.txt      #對test.txt進行操作 

6、sed直接操作文件示例

編寫一個腳本,用來調整vsftpd 服務配置,要求禁止匿名用戶,但允許本地用戶 

  1. [root@server2 ~]# useradd dada  
  2. [root@server2 ~]# passwd dada  
  3. [root@server2 ~]# useradd xiaoxiao  
  4. [root@server2 ~]# passwd xiaoxiao  
  5. [root@server2 ~]# vi ftp.sh  
  6. #!/bin/bash  
  7. A=vsftpd  
  8. FTP=/etc/vsftpd/vsftpd.conf  
  9. yum -y install $A  
  10. sed -i -e '/local_enable/s/NO/YES/g' $FTP  
  11. sed -i -e '/write_enable/s/NO/YES/g' $FTP  
  12. sed -i -e 's/^#chroot_local_user=YES/chroot_local_user=YES/g' $FTP  
  13. sed -i  '$aallow_writeable_chroot=YES' $FTP  
  14. sed -i -e '/listen/s/NO/YES/g' $FTP  
  15. sed -i -e '/listen_ipv6/s/YES/NO/g' $FTP  
  16. systemctl start $A  
  17. netstat -anpt | grep $A  
  18. [root@server2 ~]# chmod +x ftp.sh  
  19. [root@server2 ~]# ./ftp.sh 

客戶機上安裝ftp進行訪問 

  1. [root@server1 ~]# yum -y install ftp  
  2. [root@server1 ~]# ftp 20.0.0.11  
  3. Name (20.0.0.11:root): dada  
  4. ftp> exit  
  5. [root@server1 ~]# ftp 20.0.0.11  
  6. Name (20.0.0.11:root): xiaoxiao  
  7. ftp> exit 

驗證成功 

 

責任編輯:龐桂玉 來源: 運維派
相關推薦

2017-03-31 14:05:26

Linux正則表達式基礎知識

2016-09-12 09:57:08

grep命令表達式Linux

2022-01-04 11:35:03

Linux Shel正則表達式Linux

2018-09-27 15:25:08

正則表達式前端

2020-09-04 09:16:04

Python正則表達式虛擬機

2020-06-28 09:51:01

工具代碼正則表達

2009-06-10 13:36:07

Java正則表達式工具類

2024-09-14 09:18:14

Python正則表達式

2010-03-25 18:25:36

Python正則表達式

2017-05-12 10:47:45

Linux正則表達式程序基礎

2022-03-28 06:19:14

正則表達式開發

2021-01-27 11:34:19

Python正則表達式字符串

2009-02-18 09:48:20

正則表達式Java教程

2019-07-17 15:45:47

正則表達式字符串前端

2009-09-16 18:19:34

正則表達式組

2011-06-02 12:34:16

正則表達式

2016-11-10 16:21:22

Java 正則表達式

2009-09-16 17:15:57

正則表達式引擎

2023-09-13 08:12:45

2009-08-14 17:52:30

C#表達式工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品国产v日韩v亚洲 | 99久9 | 欧美成人影院 | 成人特区 | 91.com在线观看 | 国产成人精品一区二区三区 | 欧美欧美欧美 | 亚洲欧洲成人 | 蜜桃视频一区二区三区 | 国产中文区二幕区2012 | 国偷自产av一区二区三区 | 亚洲天堂中文字幕 | 黄色一级片aaa | 精品欧美一区二区中文字幕视频 | 在线观看国产三级 | 一区二区三区视频在线观看 | 成人午夜看片 | 亚洲精品在线看 | 91成人在线| 99精品视频免费观看 | 国产视频福利在线观看 | 91 在线| 成人欧美一区二区三区黑人孕妇 | 亚洲午夜精品一区二区三区 | 亚洲在线成人 | 日韩电影中文字幕 | 久久久久亚洲精品 | 免费簧片视频 | 亚洲欧美中文日韩在线v日本 | 男人av的天堂 | 久久高清精品 | 九九色综合 | xxxxx免费视频 | 老司机深夜福利网站 | 97色在线观看免费视频 | 欧美久久久久久 | 在线视频 欧美日韩 | 天天拍天天操 | 国产福利在线 | 国产精品亚洲成在人线 | 婷婷综合网|