学习笔记:文本过滤_____unix 下的通配符
生活随笔
收集整理的這篇文章主要介紹了
学习笔记:文本过滤_____unix 下的通配符
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有個文件 test.txt 內容如下:bash-3.00$ cat test.txt?useruseruser_hiuser#注:呢行系空行T
J
GATEMAN
GATTTTTEMAN
GABBEMAN
AAABbash-3.00$?下面介紹下常用的通配符 配合grep 命令:1. ? "." ? 匹配單字符例如:bash-3.00$ grep -n u..r test.txt?1: ? ? ?user2: ?user3: ? user_hi4:userbash-3.00$ grep -n u..r.h.. test.txt ? ? #匹配唔成功bash-3.00$ grep -n u..r.h. test.txt?3: ? user_hi
==========================================================================2. ?”^" 匹配行首例如:bash-3.00$ grep -n ^u test.txt?4:user ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#只匹配到第4行, 因為^u 表示以u開頭的行,不包括以空格和tab開頭的行bash-3.00$ grep -n ^u.e test.txt ? ?# 和. 配合使用4:user
==========================================================================3. "$" 匹配行尾例如:bash-3.00$ grep -n er$ test.txt ? ? ? ? ? ? ? ? ? ? ?#以er結尾的行1: ? ? ?user2: ?user4:userbash-3.00$ grep -n ^u..r$ test.txt ? ? ? ? ? ? ? ? ?#配合^使用 ?以u開頭 中間有2個字符 而且 r結尾的行4:userbash-3.00$ grep -n ^$test.txt ? ? ? ? ? ? ? ? ? ? ? # ?^$ 只匹配空行 ?不包括有空格的行(第5行)5:bash-3.00$ grep -n ^.$test.txt ? ? ? ? ? ? ? ? ? ? ?# 匹配只有1個字符的行(第6行只有1個字符T)6:Tbash-3.00$ grep -n ^..$test.txt ? ? ? ? ? ? ? ? ? ???# 匹配有且只有2個字符的行(第7行只有2個字符:空格 和 J)7: J
==========================================================================4. "*" 匹配單字符 或重復隊列例如:bash-3.00$ grep -n * test.txt ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #單獨使用 *什么也匹配不到bash-3.00$ grep -n ^k*test.txt ? ? ? ? ? ? ? ? ? ? ? ? ? ?#匹配以n個k開頭的行 n>=0 ?因為包含0個k開頭的行,所以實際上匹配所有行1: ? ? ?user2: ?user3: ? user_hi4:user5:6:T7: J8:GATEMAN9:GATTTTTEMAN10:GABBEMANbash-3.00$ grep -n us*e..h*i$ test.txt ? ? #未指定開頭,含有1個u,后面跟0個或n個s,跟著e,跟住2個字符,跟住0個或n個h,i結尾????3: ? user_hibash-3.00$ grep -n GAT*..AN$ test.txt ? #你懂的 ?0個或N個T8:GATEMAN9:GATTTTTEMAN
gateman@GPC:~/shell$ grep -n G.*MAN test.txt # .*組合使用 常用的來了 意思是G后面跟任意字符 任意次..
8:GATEMAN
9:GATTTTTEMAN
10:GABBEMAN
==========================================================================5. ? ”\“?屏蔽一個特殊字符的含義有時需要查找一些字符或字符串,而它們包含了系統指定為特殊字符的一個字符。什么是特殊字符?一般意義上講,下列字符可以認為是特殊字符:¥ ., () {} [] * ^ % $.....假定要匹配包含字符“.”的各行而?"." 代表匹配任意單字符的特殊字符,因此需要屏蔽其含義。操作如下:\ .上述模式不認為反斜杠后面的字符是特殊字符,而是一個普通字符,即句點。假定要匹配包含^的各行,將反斜杠放在它前面就可以屏蔽其特殊含義。如下:\ ^如果要在正則表達式中匹配以* . p a s結尾的所有文件,可做如下操作:\ * \ . p a s即可屏蔽字符*的特定含義。==========================================================================
6.? "[ ]" 匹配1個集合
如:
gateman@GPC:~/shell$ grep -n u[Ss]er test.txt???????????????? #匹配大寫 S或小寫s
1:??? user
2:? user
3:?? user_hi
4:user
為抽取諸如S c o u t、s h o u t、b o u g h t等單詞,使用下列表達式:
[ou] .*t
匹配以字母o或u開頭,后跟任意一個字符任意次,并以t結尾的任意字母。
也許要匹配所有包含s y s t e m后跟句點的所有單詞,這里S可大寫或小寫。使用如下操作:
[ S,s ] y s t e m \ .
[ ]在指定模式匹配的范圍或限制方面很有用。結合使用*與[ ]更是有益,例如[ A - Z a - Z ] *將
匹配所有單詞。
[ A - Z a - z ] *
注意^符號的使用,當直接用在第一個括號里,意指否定或不匹配括號里內容。
[^a-zA-Z]
匹配任一非字母型字符,而
[ ^ 0 - 9 ]
匹配任一非數字型字符。
==========================================================================
7. "\{\}" 指定匹配次數
例如:gateman@GPC:~/shell$ grep -n ?AT\{1\}E test ? ? ? ? ? ? ? ? ? ? ? ? ? ?#一定要帶“ ”號,否則無結果 ?gateman@GPC:~/shell$ grep -n "AT\{1\}E" test.txt ? ? ? ? ? ? ? ? ? ? ?#只跟1個T8:GATEMANgateman@GPC:~/shell$ grep -n "A\{1,\}B" test.txt ? ? ? ? ? ? ? ? ? ? ?#1個或以上的A跟住B ?例如AB AAB AAAB..10:GABBEMAN11:AAABgateman@GPC:~/shell$ grep -n "A\{1\}B" test.txt ? ? ? ? ? ? ? ? ? ? ? #只匹配AB, 注意: ?AAAB 包含AB10:GABBEMAN11:AAAB
gateman@GPC:~/shell$ grep -n "^A\{1,2\}B" test.txt ? ? ?#1~2個A ,只匹配AB 和AAB 并且以A開頭, 注意: ?AAAB 不符gateman@GPC:~/shell$ grep -n "^A\{1,3\}B" test.txt ? ? ?#這個就可以穩出來了.11:AAAB
J
GATEMAN
GATTTTTEMAN
GABBEMAN
AAABbash-3.00$?下面介紹下常用的通配符 配合grep 命令:1. ? "." ? 匹配單字符例如:bash-3.00$ grep -n u..r test.txt?1: ? ? ?user2: ?user3: ? user_hi4:userbash-3.00$ grep -n u..r.h.. test.txt ? ? #匹配唔成功bash-3.00$ grep -n u..r.h. test.txt?3: ? user_hi
==========================================================================2. ?”^" 匹配行首例如:bash-3.00$ grep -n ^u test.txt?4:user ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#只匹配到第4行, 因為^u 表示以u開頭的行,不包括以空格和tab開頭的行bash-3.00$ grep -n ^u.e test.txt ? ?# 和. 配合使用4:user
==========================================================================3. "$" 匹配行尾例如:bash-3.00$ grep -n er$ test.txt ? ? ? ? ? ? ? ? ? ? ?#以er結尾的行1: ? ? ?user2: ?user4:userbash-3.00$ grep -n ^u..r$ test.txt ? ? ? ? ? ? ? ? ?#配合^使用 ?以u開頭 中間有2個字符 而且 r結尾的行4:userbash-3.00$ grep -n ^$test.txt ? ? ? ? ? ? ? ? ? ? ? # ?^$ 只匹配空行 ?不包括有空格的行(第5行)5:bash-3.00$ grep -n ^.$test.txt ? ? ? ? ? ? ? ? ? ? ?# 匹配只有1個字符的行(第6行只有1個字符T)6:Tbash-3.00$ grep -n ^..$test.txt ? ? ? ? ? ? ? ? ? ???# 匹配有且只有2個字符的行(第7行只有2個字符:空格 和 J)7: J
==========================================================================4. "*" 匹配單字符 或重復隊列例如:bash-3.00$ grep -n * test.txt ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #單獨使用 *什么也匹配不到bash-3.00$ grep -n ^k*test.txt ? ? ? ? ? ? ? ? ? ? ? ? ? ?#匹配以n個k開頭的行 n>=0 ?因為包含0個k開頭的行,所以實際上匹配所有行1: ? ? ?user2: ?user3: ? user_hi4:user5:6:T7: J8:GATEMAN9:GATTTTTEMAN10:GABBEMANbash-3.00$ grep -n us*e..h*i$ test.txt ? ? #未指定開頭,含有1個u,后面跟0個或n個s,跟著e,跟住2個字符,跟住0個或n個h,i結尾????3: ? user_hibash-3.00$ grep -n GAT*..AN$ test.txt ? #你懂的 ?0個或N個T8:GATEMAN9:GATTTTTEMAN
gateman@GPC:~/shell$ grep -n G.*MAN test.txt # .*組合使用 常用的來了 意思是G后面跟任意字符 任意次..
8:GATEMAN
9:GATTTTTEMAN
10:GABBEMAN
==========================================================================5. ? ”\“?屏蔽一個特殊字符的含義有時需要查找一些字符或字符串,而它們包含了系統指定為特殊字符的一個字符。什么是特殊字符?一般意義上講,下列字符可以認為是特殊字符:¥ ., () {} [] * ^ % $.....假定要匹配包含字符“.”的各行而?"." 代表匹配任意單字符的特殊字符,因此需要屏蔽其含義。操作如下:\ .上述模式不認為反斜杠后面的字符是特殊字符,而是一個普通字符,即句點。假定要匹配包含^的各行,將反斜杠放在它前面就可以屏蔽其特殊含義。如下:\ ^如果要在正則表達式中匹配以* . p a s結尾的所有文件,可做如下操作:\ * \ . p a s即可屏蔽字符*的特定含義。==========================================================================
6.? "[ ]" 匹配1個集合
如:
gateman@GPC:~/shell$ grep -n u[Ss]er test.txt???????????????? #匹配大寫 S或小寫s
1:??? user
2:? user
3:?? user_hi
4:user
為抽取諸如S c o u t、s h o u t、b o u g h t等單詞,使用下列表達式:
[ou] .*t
匹配以字母o或u開頭,后跟任意一個字符任意次,并以t結尾的任意字母。
也許要匹配所有包含s y s t e m后跟句點的所有單詞,這里S可大寫或小寫。使用如下操作:
[ S,s ] y s t e m \ .
[ ]在指定模式匹配的范圍或限制方面很有用。結合使用*與[ ]更是有益,例如[ A - Z a - Z ] *將
匹配所有單詞。
[ A - Z a - z ] *
注意^符號的使用,當直接用在第一個括號里,意指否定或不匹配括號里內容。
[^a-zA-Z]
匹配任一非字母型字符,而
[ ^ 0 - 9 ]
匹配任一非數字型字符。
==========================================================================
7. "\{\}" 指定匹配次數
例如:gateman@GPC:~/shell$ grep -n ?AT\{1\}E test ? ? ? ? ? ? ? ? ? ? ? ? ? ?#一定要帶“ ”號,否則無結果 ?gateman@GPC:~/shell$ grep -n "AT\{1\}E" test.txt ? ? ? ? ? ? ? ? ? ? ?#只跟1個T8:GATEMANgateman@GPC:~/shell$ grep -n "A\{1,\}B" test.txt ? ? ? ? ? ? ? ? ? ? ?#1個或以上的A跟住B ?例如AB AAB AAAB..10:GABBEMAN11:AAABgateman@GPC:~/shell$ grep -n "A\{1\}B" test.txt ? ? ? ? ? ? ? ? ? ? ? #只匹配AB, 注意: ?AAAB 包含AB10:GABBEMAN11:AAAB
gateman@GPC:~/shell$ grep -n "^A\{1,2\}B" test.txt ? ? ?#1~2個A ,只匹配AB 和AAB 并且以A開頭, 注意: ?AAAB 不符gateman@GPC:~/shell$ grep -n "^A\{1,3\}B" test.txt ? ? ?#這個就可以穩出來了.11:AAAB
總結
以上是生活随笔為你收集整理的学习笔记:文本过滤_____unix 下的通配符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: grep 用法介绍
- 下一篇: ubuntu 10.10 配置 tomc