shell文字過濾器之grep

2021-08-19 10:20:48 字數 2686 閱讀 3376

grep,sed和awk都是文字處理工具,雖然都是文字處理工具但卻都有各自的優缺點,一種文字處理命令時不能被另乙個完全替換的,否則也不會出現三個文字處理命令了。

grep:stream editor,文字過濾器,如果僅僅是過濾文字,可使用grep,其效率要比其他的高很多;

awk:報告生成器,格式化以後顯示。如果對處理的資料需要生成報告之類的資訊,或者你處理的資料是按列進行處理的,最好使用awk。

global search regular expression and print out the line

作用:文字搜尋工具,根據使用者指定的「模式「對文字主行進行匹配,列印匹配到的行;

模式:由正規表示式字元及文字字元所編寫的過濾條件;

regexp:由一類特殊字元及文字字元所編寫的模式,其中有些不表示字元字面意義,而標示控制或統配的功能;

grep [options] pattern [file]

選項:--color=auto:對匹配到的文字進行著色顯示;

-v:顯示不能被pattern匹配到的行;

-i:忽略字元大小寫;

-o:僅顯示匹配到的字串

-q:靜默模式,不輸出任何資訊;

-a #:after,後#行;

-b #:before。前#行;

-c #:context,前後各#行;

基本正規表示式元字元:

字元匹配:

. 匹配任意單個字元;

[] 匹配指定範圍內的任意單個字元;

[^] 匹配指定範圍外的任意單個字元;

[:digit:]

[:lower:]

[:upper:]

[:alpha:]

[:punct:]

[:space:]

匹配次數:用在要指定次數的字元後面,用於指定前面的字元要出現的次數;

*:匹配前面的字元任意次;

例如:grep 「x*y「

abxy

xay******y

貪婪模式

.*:任意長度的任意字元;

\?:匹配其前面的字元0或1次,即前面的字元可有可無;

\+:匹配其前面的字元至少一次

\:匹配前面的字元m次

\:匹配前面的字元至少m次,至多n次;

\:匹配前面的字元至多n次;

\:匹配前面的字元至少m次;

位置錨定:

^: 行首錨定;用於模式的最左側;

$: 行尾錨定;用於模式的最右側;

^pattern$: 用於模式匹配整行;

^$ ^[

[:space:]

]*$\< 或 \b:詞首錨定;用於單詞模式的左側;

\> 或 \b:詞尾錨定;用於單詞模式的右側;

\:匹配整個單詞;

分組:\(

\): 將乙個或多個字元**在一起,當作乙個整體進行處理;

\(xy\)*ab

note:分組括號中的模式匹配到的內容會被正規表示式引擎記錄於內部的變數中,這些變數的命名方式為: \1 \2 \3..

\1:從左側起,第乙個左括號以及與之匹配右括號之間的模式所匹配到的字元;

\(ab\+

\(xy\)*\):

\1: ab\+

\(xy\)* \2: xy

後向引用:引用前面的分組括號中的模式所匹配字元,(而非模式本身)

練習:

1 顯示/proc/meminfo檔案中以大小s開頭的行;

grep -i '^s' /proc/meminfo

grep ^[ss] /proc/meminfo

grep -e ^s -e ^s /proc/meminfo

2 顯示/etc/passwd檔案中不以/bin/bash結尾的行;

grep -v '/bin/bash$' /etc/passwd

3 顯示/etc/passwd檔案中id號最大的使用者的使用者名稱;

sort -t: -k3 -n /etc/passwd | tail -1 | cut -d: -f1

4 如果root使用者存在,顯示預設的shell程式;

grep

'^root' /etc/passwd | cut -d: -f7

5 找出/etc/passwd中的兩位或三位數;

grep

'\<[[:digit:]]\\>' /etc/passwd

6 顯示/etc/rc.d/rc.sysinit檔案中,至少以乙個空白字元開頭的且後面存在非空白字元的行;

grep

'^[[:space:]]\+[^[:space:]]' /etc/rc.d/rc.sysinit

7 找出「netstat -tan「命令的結果中以「listen「後跟0,1或多個空白字元結尾的行;

netstat -tan | grep

'listen[[:space:]]*$'

8 新增使用者bash,testbash,bashrc以及noligin(其shell為/sbib/nologin);而後找

出/etc/passwd檔案中使用者名稱同shell名的行;

grep

'^\(\<[[:alnum:]]\+\>\).*/\1$' /etc/passwd

Revit二開 過濾器之選擇過濾器

滑鼠在選擇的時候通過乙個過濾器就可以篩選指定類別的元素,那麼我在用滑鼠點選的時候只要選擇牆,怎麼做呢。案例如下 var ele sel.pickobject objecttype.element,要新增的過濾器 getelement doc 過濾器定義 public class wallfilter...

servlet過濾器實現過濾敏感文字

實現思路 通過過濾器對jsp頁面進行攔截,對出現的敏感文字進行替換,然後替換後的內容再輸出到jsp頁面,敏感文字替換內容從proppreties配置檔案中讀取 內容過多的話也可從資料庫中讀取 首先建乙個servlet過濾器類,在web.xml配置好過濾器 textfilter cn.servlet....

Vue 過濾器案例(全域性過濾器和區域性過濾器)

doctype html en utf 8 viewport content width device width,initial scale 1.0 js vue 2.4.0 js script 過濾器 title head 兩個過濾器的名稱都為msgformat,但是控制不同作用,乙個是全域性的...