1. linux下的正則表達式,幫忙解釋一下
man
bash:翻閱關於bash的用戶手冊頁,查看其相關的功能和描述。
|:將前面的命令輸出的內容以後面的命令再處理。
col
-b:過濾掉所有的控制字元,包括RLF和HRLF(使得顯示出來的文本沒有亂碼)。
>:將前面的命令輸出的內容保存到後面所述的文件中。
綜合起來,就是把bash的用戶手冊頁的內容,去掉亂碼(控制字元)之後,輸出到當前目錄下的bash.txt內。
當命令得到執行,則當前目錄下會出現一個bash.txt文件,裡面的內容正是man手冊內關於bash的幫助和介紹。
2. 如何在linux中寫正則表達式
1.linux文本查找命令 在說linux正規表達式之前,還介紹下linux中查找文本文件常用的三個命令: 1.grep : 最早的文本匹配程序,使用POSIX定義的基本正則表達式(BRE)來匹配文本。 2...
2.正則表達式簡要介紹 1.正則表達式的組成 (1).一般字元:沒有特殊意義的字元 (2).特殊字元(meta字元):元字元,有在正則表達式中有特殊意義 2.如下講下正則表達式中的常見meta字元 (1)...
3. Linux命令詳解之正則表達式
特殊字元
^
行首
$
行尾
.
任意一個字元
[]
內含字元范圍,加^表示反向字元范圍,在該范圍內任何一個字元都可以匹配
(若要恢復普通用法,可在其前加轉義字元/)
[:alnum:]
字母與數字字元
[:alpha:]
字母
[:ascii:]
ascii字元
[:blank:]
空格或製表符
[:cntrl:]
ascii控制字元
[:digit:]
數字
[:graph:]
非控制、非空格字元
[:lower:]
小寫字母
[:print:]
可列印字元
[:punct:]
標點符號字元
[:space:]
空白字元,包括垂直製表符
[:upper:]
大寫字母
[:xdigit:]
十六進制數字
其他字元
?
至多匹配一次
*
必須匹配0次或多次
+
必須匹配1次或多次
{n}
必須匹配n次
{n,}
必須匹配n次或n次以上
{n,m}
必須匹配在n到m次之間,包括n和m
示例
查找當前目錄下所有以一位數字命名且以.txt結尾的文件,並進行顯示
find
.-name
[[:digit:]]/.txt
-ok
ls
-l
{}
/;
查找所有以.txt結尾的文件並顯示
find
.
-name[[:alnum:]]*/.txt
-ok
ls
-l
{}
/;
4. Linux正則表達式教程:Grep Regex示例
正則表達式是特殊字元,可幫助搜索數據,匹配復雜模式。正則表達式縮寫為「regexp」或「regex」。
為了便於理解,讓我們逐一學習不同類型的正則表達式。
[TOC]
一些常用的正則表達式命令是tr,sed,vi和grep。下面列出了一些基本的正則表達式。
我們來看一個例子吧。
執行cat示例以查看現有文件的內容
搜索包含字母'a'的內容。
' ^ '匹配字元串的開頭。讓我們搜索一下STARTS的內容
僅過濾以字元開頭的行。將忽略開頭不包含字元「a」的行。
讓我們看看另一個例子 -
僅選擇那些以 $ 結尾的行
這些表達式告訴我們字元串中字元的出現次數。他們是
例:
過濾掉包含字元'p'的所有行
我們想要檢查字元'p'是否在字元串中依次出現2次。為此,語法將是:
注意:您需要使用這些正則表達式添加-E。
這些正則表達式包含多個表達式的組合。他們之中有一些是:
例:
搜索所有字元't'
假設我們要過濾字元'a'在字元't'之前的行
我們可以使用命令
大括弧擴展的語法是花括弧「{}」內的序列或逗號分隔的項目列表。序列中的起始和結束項由兩個句點「..」分隔。
一些例子:
在上面的示例中,echo命令使用大括弧擴展創建字元串。
5. linux 正則表達式怎麼匹配
php">一.linux文本查找命令
在說linux正規表達式之前,還介紹下linux中查找文本文件常用的三個命令:
1.grep:最早的文本匹配程序,使用POSIX定義的基本正則表達式(BRE)來匹配文本。
2.egrep:擴展式grep,其使用擴展式正規表達式(ERE)來匹配文本。
3.fgrep:快速grep,這個版本匹配固定字元串而非正則表達式。並且是唯一可以並行匹配多個字元串的版本。
如下簡單的介紹grep命令:
語法格式:
grep[options...]pattern-spec[files...]
用途:
匹配一個或多個模式的文本行。
options:
-E:使用擴展正則表達式進行匹配,grep-E或取代egrep命令。
-F:使用固定字元串進行匹配,grep-F或取代傳統的fgrep命令。
-e:通常第一個非選項的參數認為是要匹配的模式,也可以同時提供多個模式,只要將其放入單引號,並用換行字元分隔他們。
模式以減號開頭時,為防止混淆其為選項,-e選項說明其後的參數為模式,即使他以減號開頭。
-f:從pat-file文件讀取模式作為匹配。
-i:模式匹配時忽略大小寫差異。
-l:列出匹配模式的文件名稱,而不是列印匹配的行。
-q:靜默的,如果匹配成功,不將匹配的行輸出到標准輸出;否則即是不成功。
-s:不顯示錯誤信息,通常與-q並用。
-v:顯示不匹配模式的行。
說明:可以同時查找多個文件中的內容,當指定多個文件時,每個顯示出的文件行前會有文件名加一個冒號標識其來自哪個文件。
可以使用多個-e或-f選項,建立要查找的模式列表。
二.正則表達式簡要介紹
1.正則表達式的組成
(1).一般字元:沒有特殊意義的字元
(2).特殊字元(meta字元):元字元,有在正則表達式中有特殊意義
2.如下講下正則表達式中的常見meta字元
(1).POSIXBRE與ERE中都有的meta字元:
:通常用於打開或關閉後續字元的特殊含義,如(...)與{...}
.:匹配任何單個字元(除NUL)
*:匹配其前的任何數目或沒有的單個字元,例:.表示任一字元,則.*匹配任一字元的任意長度
^:匹配緊接著的正則表達式,BRE中僅在正則表達式的開頭有特殊的含義,ERE中在任何位置都有特殊含義
$:匹配前面的正則表達式,在字元串或者行結尾處。BRE中僅在正則表達式的結尾處有特殊的含義,ERE中在任何位置都有特殊含義
[]:匹配方括弧內的任一字元,其中可用連字元(-)指的連續字元的范圍;^符號苦出現在方括弧的第一個位置,則表示匹配不在列表中的任一字元,
(2).POSIXBRE中才有的字元:
{n,m}:區間表達式,匹配在它前面的單個字元重現的次數區別。{n}指重現n次;{n,m}指重現n至m次;
():保留空間,可以將最多9個獨立的子模式存儲在單個模式中。如(ab).*1:
指匹配ab組合的兩次重現,中間可存在任意數目的字元。
:重復在(與)方括弧內第n個子模式至此點的模式。
(3).POSIXERE中才有的字元:
{n,m}:與BRE的{n,m}功能相同
+:匹配前面正則表達式的一個或多個擴展
?:匹配前面正則表達式的零個或一個擴展
|:匹配|符號前或後的正則表達式
():匹配方括弧括起來的正則表達式群
(4).方括弧([])表達式
4.1.字元集[::]
標識字元集,有如下幾種:
[::alnum]
:數字字元
[:digit:]
:數字字元
[:punct:]
:標點符號字元
[:alpha:]
:字母字元
[:graph:]
:非空格字元
[:space:]
:空格字元
[:blank:]
:空格與定位字元
[:lower:]
:小寫字母字元
[:upper:]
:大寫字母字元
[:cntrl:]
:控制字元
[:print:]
:可顯示的字元
[:xdigit:]
:16進制數字
4.2.排序符號
指將多個字元視為一個符號,如[.ch.]即將ch視為一個符號
4.3.等價字元
認為多個字元相等,如[=e=]在法文的locale里,可匹配於多種與e相似的字元,此處不再列出。
說明:這三種構造除其自身的方括弧之外,還必須使用額外的方括弧括起來。
例:[[:alpha:]!]:匹配任一英文字母或感嘆號。
[[.ch.]:匹配ch排序元素,而不匹配單獨的字母c或h.
3.簡單正規表達式匹配案例
china:匹配此行中任意位置有china字元的行
^china:匹配此以china開關的行
china$:匹配以china結尾的行
^china$:匹配僅有china五個字元的行
[Cc]hina:匹配含有China或china的行
Ch.na:匹配包含Ch兩字母並且其後緊跟一個任意字元之後又有na兩個字元的行
Ch.*na:匹配一行中含Ch字元,並且其後跟0個或者多個字元,再繼續跟na兩字元
二.實例
如下通過常用實例來學習BRE和ERE匹配,源文件url.txt內容如下:
www..comhttp://www..comhttps://www..comhttp://wwwcom.com
1.url匹配
匹配以http或者https開頭,並且其後為:並且含有.的串
BRE匹配:
grep'^https{0,1}.*..*'url.txt
ERE匹配:
grep-E'^https?.*..*'url.txt
匹配結果如下:
http://www..comhttps://www..com
2.Email匹配
示例文件內容為:
[email protected]@[email protected]@gmail.com
@@.com
匹配以字母數字或者下劃線開頭的多個字元,其後有一個@之後有多個字母數字或者下劃線,其中有一個.號
grep'^[[:alpha:][:digit:]_]*@[[:alpha:][:digit:]]*..*'email.txt
匹配結果:
[email protected]@[email protected]
先到這里,後續再接著寫。
6. Linux文本匹配命令grep與fgrep使用全解
Linux中grep與fgrep命令的使用,兩個命令的使用都與文本的搜索與匹配相關,是Linux入門學習中的基礎知識,接下來是我為大家收集的Linux文本匹配命令grep與fgrep使用全解,希望能幫到大家。
Linux文本匹配命令grep與fgrep使用全解
grep
grep (global search regular expression(RE) and print out the line,全面搜索正則表達式並把行列印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行列印出來。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的擴展,支持更多的re元字元, fgrep就是fixed grep或fast grep,它們把所有的字母都看作單詞,也就是說,正則表達式中的元字元表示回其自身的字面意義,不再特殊。Linux使用GNU版本的grep。它功能更強,可以通過-G、-E、-F命令行選項來使用egrep和fgrep的功能。
grep的工作方式是這樣的,它在一個或多個文件中搜索字元串模板。如果模板包括空格,則必須被引用,模板後的所有字元串被看作文件名。搜索的結果被送到屏幕,不影響原文件內容。
grep可用於shell腳本,因為grep通過返回一個狀態值來說明搜索的狀態,如果模板搜索成功,則返回0,如果搜索不成功,則返回1,如果搜索的文件不存在,則返回2。我們利用這些返回值就可進行一些自動化的文本處理工作。
grep --help
匹配模式選擇:
-E, --extended-regexp 擴展正則表達式egrep
-F, --fixed-strings 一個換行符分隔的字元串的集合fgrep
-G, --basic-regexp 基本正則
-P, --perl-regexp 調用的perl正則
-e, --regexp=PATTERN 後面根正則模式,默認無
-f, --file=FILE 從文件中獲得匹配模式
-i, --ignore-case 不區分大小寫
-w, --word-regexp 匹配整個單詞
-x, --line-regexp 匹配整行
-z, --null-data 一個 0 位元組的數據行,但不是空行
雜項:
-s, --no-messages 不顯示錯誤信息
-v, --invert-match 顯示不匹配的行
-V, --version 顯示版本號
--help 顯示幫助信息
--mmap use memory-mapped input if possible
輸入控制:
-m, --max-count=NUM 匹配的最大數
-b, --byte-offset 列印匹配行前面列印該行所在的塊號碼。
-n, --line-number 顯示的加上匹配所在的行號
--line-buffered 刷新輸出每一行
-H, --with-filename 當搜索多個文件時,顯示匹配文件名前綴
-h, --no-filename 當搜索多個文件時,不顯示匹配文件名前綴
--label=LABEL print LABEL as filename for standard input
-o, --only-matching 只顯示一行中匹配PATTERN 的部分
-q, --quiet, --silent 不顯示任何東西
--binary-files=TYPE 假定二進制文件的TYPE 類型;
TYPE 可以是`binary', `text', 或`without-match'
-a, --text 匹配二進制的東西
-I 不匹配二進制的東西
-d, --directories=ACTION 目錄操作,讀取,遞歸,跳過
-D, --devices=ACTION 設置對設備,FIFO,管道的操作,讀取,跳過
-R, -r, --recursive 遞歸調用
--include=PATTERN 只查找匹配FILE_PATTERN 的文件
--exclude=PATTERN 跳過匹配FILE_PATTERN 的文件和目錄
--exclude-from=FILE 跳過所有除FILE 以外的文件
-L, --files-without-match 匹配多個文件時,顯示不匹配的文件名
-l, --files-with-matches 匹配多個文件時,顯示匹配的文件名
-c, --count 顯示匹配了多少次
-Z, --null 在FILE 文件最後列印空字元
文件控制:
-B, --before-context=NUM 列印匹配本身以及前面的幾個行由NUM控制
-A, --after-context=NUM 列印匹配本身以及隨後的幾個行由NUM控制
-C, --context=NUM 列印匹配本身以及隨後,前面的幾個行由NUM控制
-NUM 根-C的用法一樣的
--color[=WHEN],
--colour[=WHEN] 使用標志高亮匹配字串;
-U, --binary 使用標志高亮匹配字串;
-u, --unix-byte-offsets 當CR 字元不存在,報告位元組偏移(MSDOS 模式)
例:
測試文件
復制代碼
代碼如下:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false,aaa,bbbb,cccc,aaaaaa
DADddd:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp:/bin/false
&nobody:$:99:99:nobody:/:/bin/false
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
http:x:33:33::/srv/http:/bin/false
dbus:x:81:81:System message bus:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
@zhangying:*:1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po
a,匹配含有root的行
復制代碼
代碼如下:
[root@krlcgcms01 test]# grep root test
root:x:0:0:root:/root:/bin/bash
b,匹配以root開頭或者以zhang開頭的行,注意反斜杠
復制代碼
代碼如下:
[root@krlcgcms01 test]# cat test |grep '^\(root\|zhang\)'
root:x:0:0:root:/root:/bin/bash
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
c,匹配以root開頭或者以zhang開頭的行,注意反斜杠,根上面一個例子一樣,-e默認是省去的
[root@krlcgcms01 test]# cat test |grep -e '^\(root\|zhang\)'
root:x:0:0:root:/root:/bin/bash
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
d,匹配以zhang開頭,只含有字母
復制代碼
代碼如下:
[root@krlcgcms01 test]# echo 'zhangying' |grep '^zhang[a-z]*$'
zhangying
e,匹配以bin開頭的行,用的egrep,在這里可以換成-F,-G
復制代碼
代碼如下:
[root@krlcgcms01 test]# cat test |grep -E '^bin'
bin:x:1:1:bin:/bin:/bin/false,aaa,bbbb,cccc,aaaaaa
f,在匹配的行前面加上該行在文件中,或者輸出中所在的行號
復制代碼
代碼如下:
[root@krlcgcms01 test]# cat test|grep -n zhangy
7:zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
13:ba:x:1002:1002::/home/zhangy:/bin/bash
15:@zhangying:*:1004:1004::/home/test:/bin/bash
g,不匹配以bin開頭的行,並顯示行號
復制代碼
代碼如下:
[root@krlcgcms01 test]# cat test|grep -nv '^bin'
root:x:0:0:root:/root:/bin/bash
DADddd:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp:/bin/false
&nobody:$:99:99:nobody:/:/bin/false
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
http:x:33:33::/srv/http:/bin/false
dbus:x:81:81:System message bus:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
@zhangying:*:1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po
h,顯示匹配的個數,不顯示內容
復制代碼
代碼如下:
[root@krlcgcms01 test]# cat test|grep -c zhang
3
i,匹配system,沒有加-i沒有匹配到東西。
復制代碼
代碼如下:
[root@krlcgcms01 test]# grep system test
[root@krlcgcms01 test]# grep -ni system test
9:dbus:x:81:81:System message bus:/:/bin/false
j,匹配zhan沒有匹配到東西,匹配zhangy能匹配到,因為在test文件中,有zhangy這個單詞
復制代碼
代碼如下:
[root@krlcgcms01 test]# cat test|grep -w zhan
[root@krlcgcms01 test]# cat test|grep -w zhangy
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
k,在這里-x後面東西,和輸出中的整行相同時,才會輸出
[root@krlcgcms01 test]# echo "aaaaaa" |grep -x aaa
[root@krlcgcms01 test]# echo "aaaa" |grep -x aaaa
aaaa
l,最多隻匹配一次,如果把-m 1去掉的話,會有三個
復制代碼
代碼如下:
[root@krlcgcms01 test]# cat test |grep -m 1 zhang
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
m,匹配行的前面顯示塊號,這個塊號是干什麼的,不知道,有誰知道可否告訴我一下
復制代碼
代碼如下:
[apacheuser@krlcgcms01 test]$ cat test |grep -b zha
241:zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
480:ba:x:1002:1002::/home/zhangy:/bin/bash
558:@zhangying:*:1004:1004::/home/test:/bin/bash
n,多文件匹配時,在匹配的行前面加上文件名
復制代碼
代碼如下:
[apacheuser@krlcgcms01 test]$ grep -H 'root' test test2 testbak
test:root:x:0:0:root:/root:/bin/bash
test2:root
testbak:root:x:0:0:root:/root:/bin/bash
o,多文件匹配時,在匹配的行前面不加上文件名
復制代碼
代碼如下:
[apacheuser@krlcgcms01 test]$ grep -h 'root' test test2 testbak
root:x:0:0:root:/root:/bin/bash
root
root:x:0:0:root:/root:/bin/bash
p,多文件匹配時,顯示匹配文件的文件名
復制代碼
代碼如下:
[apacheuser@krlcgcms01 test]$ grep -l 'root' test test2 testbak DAta
test
test2
testbak
q,沒有-o時,有一行匹配,這一行裡面有3個root,加上-o後,這個3個root就出來了
復制代碼
代碼如下:
[apacheuser@krlcgcms01 test]$ grep 'root' test
root:x:0:0:root:/root:/bin/bash
[apacheuser@krlcgcms01 test]$ grep -o 'root' test
root
root
root
r,遞歸顯示匹配的內容,在test目錄下面建個mytest目錄, test目錄下面的test文件到mytest下面,能看到上面的結果
復制代碼
代碼如下:
[root@krlcgcms01 test]# grep test -R /tmp/test/mytest
/tmp/test/mytest/test:test:x:1003:1003::/home/test:/bin/bash
/tmp/test/mytest/test:@zhangying:*:1004:1004::/home/test:/bin/bash
s,顯示匹配root後面的3行
復制代碼
代碼如下:
[root@krlcgcms01 test]# cat test |grep -A 3 root
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false,aaa,bbbb,cccc,aaaaaa
daemon:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
fgrep
用法: fgrep [選項]... PATTERN [FILE]...
在每個 FILE 或是標准輸入中查找 PATTERN。
PATTERN 是一組由斷行符分隔的定長字元串。
例如: fgrep -i 'hello world' menu.h main.c
正則表達式選擇與解釋:
-e, --regexp=PATTERN 用 PATTERN 來進行匹配操作
-f, --file=FILE 從 FILE 中取得 PATTERN
-i, --ignore-case 忽略大小寫
-w, --word-regexp 強制 PATTERN 僅完全匹配字詞
-x, --line-regexp 強制 PATTERN 僅完全匹配一行
-z, --null-data 一個 0 位元組的數據行,但不是空行
雜項:
-s, --no-messages 不顯示錯誤信息
-v, --invert-match 選中不匹配的行
-V, --version 顯示版本信息並退出
--help 顯示此幫助並退出
--mmap 忽略向後兼容性
Output control:
-m, --max-count=NUM 匹配的最大數
-b, --byte-offset 列印匹配行前面列印該行所在的塊號碼
-n, --line-number 顯示的加上匹配所在的行號
--line-buffered 刷新輸出每一行
-H, --with-filename 當搜索多個文件時,顯示匹配文件名前綴
-h, --no-filename 當搜索多個文件時,不顯示匹配文件名前綴
--label=LABEL use LABEL as the standard input file name prefix
-o, --only-matching 只顯示一行中匹配PATTERN 的部分
-q, --quiet, --silent 不顯示所有輸出
--binary-files=TYPE 假定二進制文件的TYPE 類型;
TYPE 可以是`binary', `text', 或`without-match'
-a, --text 等同於 --binary-files=text
-I 等同於 --binary-files=without-match
-d, --directories=ACTION 操作目錄的方式;
ACTION 可以是`read', `recurse',或`skip'
-D, --devices=ACTION 操作設備、先入先出隊列、套接字的方式;
ACTION 可以是`read'或`skip'
-R, -r, --recursive 等同於 --directories=recurse
--include=FILE_PATTERN 只查找匹配FILE_PATTERN 的文件
--exclude=FILE_PATTERN 跳過匹配FILE_PATTERN 的文件和目錄
--exclude-from=FILE 跳過所有除FILE 以外的文件
--exclude-dir=PATTERN 跳過所有匹配PATTERN 的目錄。
-L, --files-without-match 只列印不匹配FILEs 的文件名
-l, --files-with-matches 只列印匹配FILES 的文件名
-c, --count 只列印每個FILE 中的匹配行數目
-T, --initial-tab 行首tabs 分隔(如有必要)
-Z, --null 在FILE 文件最後列印空字元
文件控制:
-B, --before-context=NUM 列印以文本起始的NUM 行
-A, --after-context=NUM 列印以文本結尾的NUM 行
-C, --context=NUM 列印輸出文本NUM 行
-NUM 等同於 --context=NUM
--color[=WHEN],
--colour[=WHEN] 使用標志高亮匹配字串;
WHEN 可以是`always', `never'或`auto'
-U, --binary 不要清除行尾的CR 字元(MSDOS 模式)
-u, --unix-byte-offsets 當CR 字元不存在,報告位元組偏移(MSDOS 模式)
‘fgrep’已不再使用了;請用 ‘grep -F’代替。
不帶 FILE 參數,或是 FILE 為 -,將讀取標准輸入。如果少於兩個 FILE 參數
就要默認使用 -h 參數。如果選中任意一行,那退出狀態為 0,否則為 1;
如果有錯誤產生,且未指定 -q 參數,那退出狀態為 2。
例:
復制代碼
代碼如下:
[root@linux test]# cat abc.sh |fgrep a #匹配含有a的
看了“Linux文本匹配命令grep與fgrep使用全解”還想看:
1. linux grep命令詳解
2. 全面解析Linux的grep命令中正則表達式的用法
3. Linux下如何使用grep命令搜索多個單詞
4. 開發人員常用什麼linux命令
7. Linux正則表達式與通配符
正則表達式:在計算機科學中,是指一個用來描述或者匹配一系列符合某個句法規則的字元串的單個字元串。在很多文本編輯器或其他工具里,正則表達式通常被用來檢索或替換那些符合某個模式的文本內容。正則表達式這個概念最初是由Unix中的工具軟體(例如sed和grep)普及開的。
只有掌握了正則表達式,才能全面地掌握 Linux 下的常用文本工具(例如:grep、egrep、GUN sed、 Awk 等) 的用法
grep、sed、awk天然支持正則
grep -v代表反選,反向選擇匹配到的內容
grep -E代表使用擴展正則
grep -P代表使用Perl正則
sed -r 代表使用擴展正則
正則表達式分為三類(man grep可以看到,分別是basic RegExs,extended RegExs,perl RegExs)
1、基本的正則表達式(Basic Regular Expression 又叫 Basic RegEx 簡稱 BREs)
2、擴展的正則表達式(Extended Regular Expression 又叫 Extended RegEx 簡稱 EREs)
3、Perl 的正則表達式(Perl Regular Expression 又叫 Perl RegEx 簡稱 PREs)
b. 處理過程:查找文本文件中是否包含要查找的 「關鍵字」(關鍵字可以是正則表達式) ,默認返回匹配的該行的內容
c. grep|egrep處理文件時,按行處理 |
| sed | sed | sed -r | - | a. 處理對象:文本文件
b.處理操作:對文本文件的內容進行 查找、替換、刪除、增加等操作
c. sed 在處理文本文件的時候,按行處理 |
| awk | - | awk | - | a. awk 處理的對象:文本文件
b. awk 處理操作:主要是對列進行操作 |
注意:egrep 或 sed -r 默認使用擴展正則表達式(EREs),一般特殊字元({})可以不轉義
grep -E 以及egrep(Extend Regular Expression)
Linux通配符和三劍客的正則表達式是不一樣的,因此,代表的意義也有較大的區別 。
通配符一般用戶命令行bash環境,而linux正則表達式用於grep, sed, awk場景。
通配符說明
示例:* 的使用:代表任意0-N個字元,代表所有字元
8. Linux||正則表達式及grep命令
以下內容首發自公眾號「小汪Waud」。
本期介紹在Linux環境下的正則表達式及grep命令。
正則表達式(Regular Expression)是對字元串操作的一種邏輯公式,就是用事先定義好的一些特定字元及這些字元的特定組合,組成一個「規則字元串」,這個字元串用來表達對字元串的一種過濾邏輯。
正則表達式基本上是一種表示法,只要程序支持這種表示法,該程序就可以用來作為正則表達式的字元串處理之用。如vi、grep、awk、sed等程序支持正則表達式,所以可以使用正則表達式的特殊字元來進行字元串的處理。但例如cp、ls等命令並不支持正則表達式,所以只能用自己的通配符。
正則表達式依照 不同的嚴謹度 分為:基礎正則表達式和擴展正則表達式。
注意!
grep是一種強大的文本搜索工具,可以使用 正則表達式匹配模式 查找文件里符合條件的字元串,並列印出來。
有點類似於WORD里的查找功能。
grep支持三種正則表達式語法:Basic、Extended和perl兼容。 如果沒有提供正則表達式類型,grep將搜索模式解釋為基本的正則表達式。要將模式解釋為擴展正則表達式,請使用-E。
查看grep的幫助文檔,如下
基本用法
grep [OPTION]... PATTERN [FILE]...
高級用法
grep [-A] [-B] [--color=auto] "查找字元" [模式] [文件]
常用參數
首先通過cat命令查看samples.txt的內容,如下圖
如果想檢索以K為行首的行,通過以下命令即可得到
如果想檢索以Z為行尾的行,通過以下命令即可得到
如果想檢索三個字元其中前面為K,後面為D中間字元,為任意字元,通過以下命令即可得到
參考資料
https://www.runoob.com/linux/linux-comm-grep.html
https://www.bilibili.com/video/BV1Yy4y117SX?p=12
9. Linux正則表達式
一.linux文本查找命令
在說linux正規表達式之前,還介紹下linux中查找文本文件常用的三個命令:
1.grep : 最早的文本匹配程序,使用POSIX定義的基本正則表達式(BRE)來匹配文本。
2.egrep : 擴展式grep,其使用擴展式正規表達式(ERE)來匹配文本。
3.fgrep : 快速grep,這個版本匹配固定字元串而非正則表達式。並且是唯一可以並行匹配多個字元串的版本。
如下簡單的介紹grep命令:
語法格式:
grep [options ...] pattern-spec [files ...]
用途:
匹配一個或多個模式的文本行。
options:
-E : 使用擴展正則表達式進行匹配, grep -E 或取代 egrep 命令。
-F : 使用固定字元串進行匹配, grep -F 或取代傳統的fgrep命令。
-e : 通常第一個非選項的參數認為是要匹配的模式,也可以同時提供多個模式,只要將其放入單引號,並用換行字元分隔他們。
模式以減號開頭時,為防止混淆其為選項,-e選項說明其後的參數為模式,即使他以減號開頭。
-f : 從pat-file文件讀取模式作為匹配。
-i : 模式匹配時忽略大小寫差異。
-l : 列出匹配模式的文件名稱,而不是列印匹配的行。
-q : 靜默的,如果匹配成功,不將匹配的行輸出到標准輸出;否則即是不成功。
-s : 不顯示錯誤信息,通常與-q並用。
-v : 顯示不匹配模式的行。
說明:可以同時查找多個文件中的內容,當指定多個文件時,每個顯示出的文件行前會有文件名加一個冒號標識其來自哪個文件。
可以使用多個-e 或 -f 選項,建立要查找的模式列表。
二.正則表達式簡要介紹
1.正則表達式的組成
(1).一般字元:沒有特殊意義的字元
(2).特殊字元(meta字元):元字元,有在正則表達式中有特殊意義
2.如下講下正則表達式中的常見meta字元
(1).POSIX BRE與ERE中都有的meta字元:
\ : 通常用於打開或關閉後續字元的特殊含義,如\(...\)與\{...\}
. : 匹配任何單個字元(除NUL)
* : 匹配其前的任何數目或沒有的單個字元,例: . 表示任一字元, 則 .* 匹配任一字元的任意長度
^ : 匹配緊接著的正則表達式,BRE中僅在正則表達式的開頭有特殊的含義,ERE中在任何位置都有特殊含義
$ : 匹配前面的正則表達式,在字元串或者行結尾處。BRE中僅在正則表達式的結尾處有特殊的含義,ERE中在任何位置都有特殊含義
[] : 匹配方括弧內的任一字元,其中可用連字元(-)指的連續字元的范圍;^符號苦出現在方括弧的第一個位置,則表示匹配不在列表中的任一字元,
(2).POSIX BRE中才有的字元:
\{n,m\} : 區間表達式,匹配在它前面的單個字元重現的次數區別。\{n\}指重現n次;\{n,m\}指重現n至m次;
\( \) : 保留空間,可以將最多9個獨立的子模式存儲在單個模式中。如\(ab\).*\1 : 指匹配ab組合的兩次重現,中間可存在任意數目的字元。
\n : 重復在\(與\)方括弧內第n個子模式至此點的模式。
(3).POSIX ERE中才有的字元:
{n,m} : 與BRE的\{n,m\}功能相同
+ : 匹配前面正則表達式的一個或多個擴展
? : 匹配前面正則表達式的零個或一個擴展
| : 匹配|符號前或後的正則表達式
( ) : 匹配方括弧括起來的正則表達式群
(4). 方括弧([])表達式
4.1.字元集 [: :]
標識字元集,有如下幾種:
[::alnum] : 數字字元[:digit:] : 數字字元[:punct:] : 標點符號字元
[:alpha:] : 字母字元[:graph:] : 非空格字元[:space:] : 空格字元
[:blank:] : 空格與定位字元[:lower:] : 小寫字母字元[:upper:] : 大寫字母字元
[:cntrl:] : 控制字元[:print:] : 可顯示的字元[:xdigit:] : 16進制數字
4.2.排序符號
指將多個字元視為一個符號,如[.ch.]即將ch視為一個符號
4.3.等價字元
認為多個字元相等,如[=e=]在法文的locale里,可匹配於多種與e相似的字元,此處不再列出。
說明:這三種構造除其自身的方括弧之外,還必須使用額外的方括弧括起來。
例 : [[:alpha:]!] : 匹配任一英文字母或感嘆號。
[[.ch.] : 匹配ch排序元素,而不匹配單獨的字母c或h.
3.簡單正規表達式匹配案例
china : 匹配此行中任意位置有china字元的行
^china : 匹配此以china開關的行
china$ : 匹配以china結尾的行
^china$ : 匹配僅有china五個字元的行
[Cc]hina : 匹配含有China或china的行
Ch.na : 匹配包含Ch兩字母並且其後緊跟一個任意字元之後又有na兩個字元的行
Ch.*na : 匹配一行中含Ch字元,並且其後跟0個或者多個字元,再繼續跟na兩字元
二.實例
如下通過常用實例來學習BRE和ERE匹配,源文件url.txt內容如下:
www..com
http://www..com
https://www..com
http://wwwcom
.com
1.url匹配
匹配以http或者https開頭,並且其後為:並且含有.的串
BRE匹配:
grep '^https\{0,1\}.*\..*' url.txt
ERE匹配:
grep -E '^https?.*\..*' url.txt
匹配結果如下:
http://www..com
https://www..com
2.Email匹配
示例文件內容為:
[email protected]
aaaa@
[email protected]
[email protected]
@@.com
匹配以字母數字或者下劃線開頭的多個字元,其後有一個@之後有多個字母數字或者下劃線,其中有一個.號
grep '^[[:alpha:][:digit:]_]*@[[:alpha:][:digit:]]*\..*' email.txt
匹配結果:
[email protected]
[email protected]
[email protected]
轉自 嘉為教育-rhce認證_rhce培訓_linux培訓_linux認證_linux考證