linux通配符与正则表达式

通配符

 *  任意字符,可重复多次

? 任意字符,重复一次

[] 代表一个字符

举例: [a,b,c] 表示abc中任意一个

通配符的作用是用来匹配文件名的

正则表达式

正则表达式是在文件中匹配符合条件的字符串的

ls find cp是不支持正则表达式的

但是grep awk sed支持正则表达式

[[email protected] test]# touch aa
[[email protected] test]# touch aab aabb
[[email protected] test]# ll
total 0
-rw-r--r-- 1 root root 0 May 16 19:47 aa
-rw-r--r-- 1 root root 0 May 16 19:47 aab
-rw-r--r-- 1 root root 0 May 16 19:47 aabb
[[email protected]-bigdata01 test]# ls aa
aa
[[email protected]-bigdata01 test]# ls aa?
aab
[[email protected]-bigdata01 test]# ls aa*
aa  aab  aabb

正则表达式特殊字符

正则表达式匹配范围

正则表达式标准字符

使用正则表达式

grep "1" /etc/passwd

包含关键字1的行,grep只要包含就行,不想通配符,要完全一致

[[email protected] test]# grep "1" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
wang:x:501:501::/home/wang:/bin/bash

grep ‘root‘ /etc/passwd

cat /etc/passwd | grep ‘root‘

都是同样的道理,但是管道符更吃资源

所以

1.匹配含有数字的行

grep ‘[0-9]‘ /etc/passwd

2.匹配连续含有三个数字的行

grep ‘[0-9][0-9][0-9]‘ /etc/passwd            或者   grep ‘:[0-9][0-9][0-9]:‘ /etc/passwd

[[email protected] test]# grep ‘[0-9][0-9][0-9]‘  /etc/passwd
games:x:12:100:games:/usr/games:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
saslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
liucheng:x:500:500::/home/liucheng:/bin/bash
wang:x:501:501::/home/wang:/bin/bas

3.匹配以r开头 n结尾的行

grep ‘^r.*n$‘ /etc/passwd

.*代表所有

[[email protected] test]# grep ‘^r.*n$‘  /etc/passwd
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

4.过滤ifconfig ,截取ip

grep -v 代表反向截取,意思就是去除带有某关键字的行    sed有替换的意思

[[email protected] test]# ifconfig | grep ‘inet addr:‘
          inet addr:192.168.126.191  Bcast:192.168.126.255  Mask:255.255.255.0
          inet addr:127.0.0.1  Mask:255.0.0.0
[[email protected]-bigdata01 test]#
[[email protected] test]# ifconfig | grep ‘inet addr:‘ | grep -v ‘127.0.0.1‘
          inet addr:192.168.126.191  Bcast:192.168.126.255  Mask:255.255.255.0
[[email protected]-bigdata01 test]# ifconfig | grep ‘inet addr:‘ | grep -v ‘127.0.0.1‘ | sed ‘s/inet addr://g‘
          192.168.126.191  Bcast:192.168.126.255  Mask:255.255.255.0
[[email protected]-bigdata01 test]# ifconfig | grep ‘inet addr:‘ | grep -v ‘127.0.0.1‘ | sed ‘s/inet addr://g‘ | sed ‘s/Bcast.*//g‘
          192.168.126.191

误区

这里有个误区,想了好久,是正则表达式和通配符的区别

我们知道通配符的*指的是任意字符,可重复多次 正则表达式的*指的是匹配前一个字符>=0次

这两个是完全不同的,那如何知道我用的*是通配符还是正则表达式

起初我陷入一个误区,看下面这串命令

[[email protected] test]# touch ac aac abc abbc
[[email protected] test]# ll
total 0
-rw-r--r-- 1 root root 0 May 16 19:55 aac
-rw-r--r-- 1 root root 0 May 16 19:55 abbc
-rw-r--r-- 1 root root 0 May 16 19:55 abc
-rw-r--r-- 1 root root 0 May 16 19:55 ac
[[email protected]-bigdata01 test]# ls | grep ‘a*c‘
aac
abbc
abc
ac
[[email protected]-bigdata01 test]# ls | grep ‘a.*c‘
aac
abbc
abc
ac
[[email protected]-bigdata01 test]# ls | grep ‘^a.*c‘
aac
abbc
abc
ac
[[email protected]-bigdata01 test]# ls | grep ‘^a*c‘
aac
ac

为什么grep ‘a*c‘  和 grep ‘^a*c$‘ 的结果会不一样,我以为一个是通配符,一个是正则,因为a*c显示的四个结果,正好

不就是匹配任意多个字符吗?

其实不然

通配符的作用是用来匹配文件名的

正则表达式是在文件中匹配符合条件的字符串的

交给管道符之后使用grep已经不是匹配文件名了,这是对文件的操作,所以说,他完全就是正则表达式

grep ‘a*c‘ 表示的是匹配a>=0个所以只要含有c就是可以的

而grep ‘^a*c$‘也是正则,表示的是以a开头,且第二个字符匹配a零次或者多次,接下来是c字母的

所以只有aac 和ac 符合条件

所以看这个例子

[[email protected] test]# ls
a  aac  abb  abbc  abc  ac  b  bb  c  cb
[[email protected]-bigdata01 test]# ls | grep ‘a*b‘
abb
abbc
abc
b
bb
cb

这里grep ‘a*b‘ 指的可不是含有a和b 而是a重复0次或者多次然后含有b

时间: 2024-10-23 21:20:54

linux通配符与正则表达式的相关文章

linux通配符和正则表达式 + notepad++

http://blog.csdn.net/pipisorry/article/details/24143801 通配符(bash 操作) 在 bash 操作环境中还有一个非常有用癿功能,那就是通配符 (wildcard) ! 用 bash 处理数据就更方便了! 常用通配符 除了通配符外,bash 环境中的特殊符号 Note: 1. 理论上,你的『档名』尽量不要使用上述字符 2. 如bash命令find可以使用通配符 正则表达式 正则表达式是一个查询的字符串,它包含一般的字符和一些特殊的字符,特殊

正则表达式与Linux通配符

正则表达式与通配符 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed 等命令可以支持正则表达式. 通配符用来匹配符合条件的文件名,通配符是完全匹配.ls.find.cp这些命令不支 持正则表达式,所以只能使用shell自己的通配符来进行匹配. Linux通配符 通配符是由shell处理的(不是由所涉及到命令语句处理的,其实我们在shell各个命令 中也没有发现有这些通配符的介绍),它只会出现在命令的"参数"里.shell会将其当作 路径或文件名去在磁

【我的Linux,我做主!】通配符和正则表达式深层解析

目录:(一)了解通配符和正则的作用(二)通配符的使用(三)正则表达式的使用(四)扩展正则表达式的使用 (一)了解通配符和正则的作用(1.1)在我们日常的工作中,我们都会使用到通配符或者正则表达式.通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件.当查找文件夹时,可以使用它来代替一个或多个真正字符:当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符.正则表达式是计算机科学的一个概念,正则表达式通常被用来检索.替换那些符合某个模式的文本,正则表达式是对

linux 通配符使用小结

首先,通配符是shell提供的一种路劲扩展功能.在linux的shell中,要区分通配符和正则表达式的区别. 简单理解,通配符是用来匹配文件名的.而正则表达式是用来匹配文件内容的. 了解通配符,首先,需要熟记通配符中的元字符: *:表示匹配任意长度的任意字符.需要注意任意长度,包括零长度,即没有字符的情况 ?:匹配一个任意字符,只能匹配一个字符 范围匹配: [0-9]:表示匹配数字 [a-z]:表示匹配小写字母 [A-Z]:表示匹配大写字母 范围匹配取反: [^0-9]:表示匹配非数字 [^a-

通配符和正则表达式

在看鸟哥的Linux私房菜的时候看到十二章一直强调通配符和正则表达式的区别,在我的理解中,两者貌似是一样的都是用来匹配的.Google之网上给出的答案是: 在文本过滤工具里,都是用正则表达式,比如像awk,sed,等,是针对文件的内容的 而通配符多用在文件名上,比如查找find,ls,cp,等等 下表是鸟哥给的Linux下的通配符 符號 內容 * 萬用字元,代表 0 個或多個字元(或數字) ? 萬用字元,代表『一定有』一個字母 # 註解,這個最常被使用在 script 當中,視為說明! / 跳脫

通配符和正则表达式的区别

而通配符多用在文件名上,比如查找find,ls,cp,等等 下表是鸟哥给的Linux下的通配符 符號 內容 * 萬用字元,代表 0 個或多個字元(或數字) ? 萬用字元,代表『一定有』一個字母 # 註解,這個最常被使用在 script 當中,視為說明! / 跳脫符號,將『特殊字元或萬用字元』還原成一般字元 | 分隔兩個管線命令的界定: ; 連續性命令的界定(注意!與管線命令並不相同) ~ 使用者的家目錄 $ 亦即是變數之前需要加的變數取代值 & 將指令變成背景下工作 ! 邏輯運算意義上的『非』

php、linux、javascript 正则表达式学习基础总结

正则表达式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 文章来源于作者个人空间http://www.ilovehai.com PHP 正则表达式中包含三种元素分别为:量词.元字符.修饰符量词 语法                    描述+      

通配符和正则表达式-grep,egrep,fgrep

通配符和正则表达式-grep,egrep,fgrep 通配符和正则表达式,通配符用于文件名匹配,命令支持ls,cp,rm等;正则为通用匹配,命令支持grep,awk,sed,vi,find等.文本过滤工具grep,egrep,fgrep 通配符 *  匹配零个或多个任意字符 ?  匹配单个任意字符 [] 匹配指定范围内的一个字符,[]括号中的 字符间隔符 可以省略,如,\=:等等.举例[1:2=3,5\7] = [12357],也推荐使用这种省略写法作为标准 ^  取反,表示非.注意:非数字即包

菜鸟的成长记录--linux 通配符和特殊字符集合的使用

通配符 当需要用命令查询所需要的结果时,用户不必全部查出一个一个找,可以使用Shell通配符.Shell命令的通配符含义如下表 符号 含义 实例 * 任意长度的任意字符 a*b,匹配如a3b.acb.aabc.a/b.a123,/b. ? 匹配任意单字符 a?b,匹配如a1b.acb.a,b [ ] 匹配指定范围内的任意字符 a[xyz]b,匹配如axb.ayb.azb [ - ] 匹配任意一个字符范围 a[a-z]b,匹配如ayb.acb.adb.aub [^...] 除了指定的字符,均可匹配