正则表达式

bash支持的引号:

“: 命令替换,反引号在1的左边

“”: 弱引用,可以实现变量替换

”: 强引用,不完成变量替换

文件名通配, globbing

*: 任意长度的任意字符

?:任意单个字符

[]:匹配指定范围内的任意单个字符

[abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]

[:space:]:空白字符

[:punct:]:标点符号

[:lower:]:小写字母

[:upper:]: 大写字母

[:alpha:]: 大小写字母

[:digit:]: 数字

[:alnum:]: 数字和大小写字母

# man 7 glob

[^]: 匹配指定范围之外的任意单个字符

[[:alpha:]]*[[:space:]]*[^[:alpha:]]

练习:

1、创建a123, cd6, c78m, c1 my, m.z, k 67, 8yu, 789等文件;注意,以上文件是以逗号隔开的,其它符号都是文件名的组成部分;

2、显示所有以a或m开头的文件;

ls [am]*

3、显示所有文件名中包含了数字的文件;

ls *[0-9]*

ls *[[:digit:]]*

4、显示所有以数字结尾且文件名中不包含空白的文件;

ls *[^[:space:]]*[0-9] ?????????

5、显示文件名中包含了非字母或数字的特殊符号的文件;

ls *[^[:alnum:]]*

登录式shell

正常通常某终端登录

su – USERNAME

su -l USERNAME

非登录式shell:

su USERNAME

图形终端下打开命令窗口

自动执行的shell脚本

bash的配置文件:

全局配置

/etc/profile, /etc/profile.d/*.sh, /etc/bashrc

个人配置

~/.bash_profile, ~/.bashrc

profile类的文件:

设定环境变量

运行命令或脚本

bashrc类的文件:

设定本地变量

定义命令别名

登录式shell如何读取配置文件?

/etc/profile –> /etc/profile.d/*.sh –> ~/.bash_profile –> ~/.bashrc –> /etc/bashrc

非登录式shell如何配置文件?

~/.bashrc –> /etc/basrc –> /etc/profile.d/*.sh

bash: 脚本解释器

姓名,来自地区,性格、爱好和特长,个人寄语

登录式shell,配置文件及次序:

/etc/profile –> /etc/profile.d/*.sh –> ~/.bash_profile –> ~/.bashrc –> /etc/bashrc

非登录式shell:

~/.bashrc –> /etc/bashrc –> /etc/profile.d/*.sh

profile: 定义环境变量、运行程序或脚本

bashrc:定义本地变量、命令别名

管道和重定向:> < >> <<

运算器、控制器: CPU

存储器:RAM

输入设备/输出设备

程序:指令和数据

控制器:指令

运算器:

存储器:

地址总线:内存寻址

数据总线:传输数据

控制总结:控制指令

寄存器:CPU暂时存储器

I/O: 硬盘,

程序

INPUT设备:

OUTPUT设备

系统设定

默认输出设备:标准输出,STDOUT, 1

默认输入设备:标准输入, STDIN, 0

标准错误输出:STDERR, 2

标准输入:键盘

标准输出和错误输出:显示器

I/O重定向:

Linux:

>: 覆盖输出

>>:追加输出

set -C: 禁止对已经存在文件使用覆盖重定向;

强制覆盖输出,则使用 >|

set +C: 关闭上述功能

2>: 重定向错误输出

2>>: 追加方式

&>: 重定向标准输出或错误输出至同一个文件

<:输入重定向

<<:Here Document

管道:前一个命令的输出,作为后一个命令的输入

命令1 | 命令2 | 命令3 | …

练习:

1、统计/usr/bin/目录下的文件个数;

# ls /usr/bin | wc -l

2、取出当前系统上所有用户的shell,要求,每种shell只显示一次,并且按顺序进行显示;

# cut -d: -f7 /etc/passwd | sort -u

3、思考:如何显示/var/log目录下每个文件的内容类型?

4、取出/etc/inittab文件的第6行;

# head -6 /etc/inittab | tail -1

5、取出/etc/passwd文件中倒数第9个用户的用户名和shell,显示到屏幕上并将其保存至/tmp/users文件中;

# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 | tee /tmp/users

6、显示/etc目录下所有以pa开头的文件,并统计其个数;

# ls -d /etc/pa* | wc -l

7、不使用文本编辑器,将alias cls=clear一行内容添加至当前用户的.bashrc文件中;

# echo “alias cls=clear” >> ~/.bashrc

grep, egrep, fgrep

grep: 根据模式搜索文本,并将符合模式的文本行显示出来。

Pattern: 文本字符和正则表达式的元字符组合而成匹配条件

grep [options] PATTERN [FILE…]

-i 忽略大小写

–color

-v: 显示没有被模式匹配到的行

-o:只显示被模式匹配到的字符串

*: 任意长度的任意字符

?: 任意单个字符

[]:

[^]:

正则表达式:REGular EXPression, REGEXP

元字符:

.: 匹配任意单个字符

[]: 匹配指定范围内的任意单个字符

[^]:匹配指定范围外的任意单个字符

字符集合:[:digit:], [:lower:], [:upper:], [:punct:], [:space:], [:alpha:], [:alnum:]

匹配次数(贪婪模式):

*: 匹配其前面的字符任意次

a, b, ab, aab, acb, adb, amnb

a*b, a?b

a.*b

.*: 任意长度的任意字符

\?: 匹配其前面的字符1次或0次

\{m,n\}:匹配其前面的字符至少m次,至多n次

\{1,\}

\{0,3\}

位置锚定:

^: 锚定行首,此字符后面的任意内容必须出现在行首

$: 锚定行尾,此字符前面的任意内容必须出现在行尾

^$: 空白行

\<或\b: 锚定词首,其后面的任意字符必须作为单词首部出现

\>或\b: 锚定词尾,其前面的任意字符必须作为单词的尾部出现

分组:

\(\)

\(ab\)*

后向引用

\1: 引用第一个左括号以及与之对应的右括号所包括的所有内容

\2:

\3:

He love his lover.

She like her liker.

He like his lover.

l..e

[root@centos72 xuexi]# cat test.txt

[root@centos72 xuexi]# cat test.txt | grep “.*\(l..e\).*\1.”

练习:

1、显示/proc/meminfo文件中以不区分大小的s开头的行;

grep -i ‘^s’ /proc/meminfo

grep ‘^[sS]’ /proc/meminfo

2、显示/etc/passwd中以nologin结尾的行;

grep ‘nologin$’ /etc/passwd

取出默认shell为/sbin/nologin的用户列表

grep “nologin$’ /etc/passwd | cut -d: -f1

取出默认shell为bash,且其用户ID号最小的用户的用户名

grep ‘bash$’ /etc/passwd | sort -t: -k 3 -n | head -1 | cut -d: -f1

3、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;

grep “^#[[:space:]]\{1,\}[^[:space:]]” /etc/inittab

4、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;

grep ‘:[0-9]:’ /etc/inittab

5、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;

grep ‘^[[:space:]]\{1,\}’ /boot/grub/grub.conf

6、显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;

grep ‘^\([0-9]\).*\1$’ /etc/inittab

练习:

1、找出某文件中的,1位数,或2位数;

grep ‘[0-9]\{1,2\}’ /proc/cpuinfo

grep –color ‘\<[0-9]\{1,2\}\>’ /proc/cpuinfo

2、找出ifconfig命令结果中的1-255之间的整数;

3、查找当前系统上名字为student(必须出现在行首)的用户的帐号的相关信息, 文件为/etc/passwd

grep ‘^student\>’ /etc/passwd | cut -d: -f3

id -u student

student1

student2

练习:分析/etc/inittab文件中如下文本中前两行的特征(每一行中出现在数字必须相同),请写出可以精确找到类似两行的模式:

l1:1:wait:/etc/rc.d/rc 1

l3:3:wait:/etc/rc.d/rc 3

grep ‘^l\([0-9]\):\1.*\1$’ /etc/inittab

REGEXP:REGular EXPression

Pattern:

正则表达式:

Basic REGEXP:基本

    Extended REGEXP:扩展

基本正则表达式:

.:

[]:

[^]:

次数匹配:

*:

\?: 0或1次

\{m,n\}:至少m次,至多n次;

.*:

锚定:

^:

$:

\<, \b:

\>, \b:

\(\)

\1, \2, \3, …

grep:使用基本正则表达式定义的模式来过滤文本的命令;

-i

-v

-o

–color

-E: 使用扩展正则表达式

-A #: 显示后面几行数字

-B #: 显示前面两行

-C #: 前后各两行

扩展正则表达式:

字符匹配:

.

[]

[^]

次数匹配:

*:匹配其前字符任意次

?: 匹配其前字符0次或1次

+: 匹配其前面的字符至少1次

{m,n}

位置锚定:

^

$

\<

\>

分组:

():分组

\1, \2, \3, …

或者

|: or

C|cat: Cat或cat, C或cat

grep -E ‘C|cat’ == C 或 cat xx.txt

grep -E ‘(C|c)at’ Cat或者 cat xx.txt

grep -E = egrep

4、显示所有以数字结尾且文件名中不包含空白的文件;

ls *[^[:space:]]*[0-9] ?????????

找出/boot/grub/grub.conf文件中1-255之间的数字;

\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>

\.

ifconfig | egrep ‘\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>’

ifconfig | egrep –color ‘(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>’

‘(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>’

ifconfig | grep -E ‘\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-1][0-9]|23[0-3])\>\.(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){2}\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>’

IPv4:

5类:A B C D E

A:1-127

B:128-191

C:192-223

\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])\>(\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>){2}\.\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>

http://mageedu.blog.51cto.com/

grep, egrep

fgrep: 不支持正则表达式

grep, egrep区别

  1. Egrep 多了。+: 匹配其前面的字符至少1次
  2. Egrep : ():{m,n} ?前面不用加\
  3. egrep多了或者 |

grep, 通配符区别

  1. Grep 的 * :匹配前面字符的任意次。
  2. Grep的 \? :匹配前面字符的一次或者零次
  3. 通配符的 * :任意字符任意次
  4. 通配符的 ?:任意字符。

find:

    实时

    精确

    支持众多查找标准

    遍历指定目录中的所有文件完成查找,速度慢;


find 查找路径 查找标准 查找到以后的处理运作

查找路径:默认为当前目录

查找标准:默认为指定路径下的所有文件

处理运作:默认为显示

匹配标准:

    -name ‘FILENAME’:对文件名作精确匹配

        文件名通配:

            *:任意长度的任意字符

            ?

            []

    -iname ‘FILENAME’:

文件名匹配时不区分大小写

    -regex PATTERN:

基于正则表达式进行文件名匹配


    -user USERNAME:

根据属主查找

    -group GROUPNAME:

根据属组查找


    -uid UID:

根据UID查找

    -gid GID:

根据GID查找


    -nouser:查找没有属主的文件

    -nogroup: 查找没有属组的文件


    -type

        f: 普通文件

        d

        c

        b

        l

        p

        s


    -size [+|-]

        #k

        #M

        #G


组合条件:

    -a

    -o

    -not


/tmp目录,不是目录,并且还不能套接字类型的文件

/tmp/test目录下,属主不是user1,也不是user2的文件;

    -mtime

    -ctime

    -atime

        [+|-]#

    -mmin

    -cmin

    -amin

        [+|-]#


    -perm MODE:精确匹配

        /MODE: 任意一位匹配即满足条件

        -MODE: 文件权限能完全包含此MODE时才符合条件


        -644

        644: rw-r–r–

        755: rwxr-xr-x

        750: rwxr-x—

    find ./ -perl -001

[root@repo ~]# find ./ -perm -147 –ls (三位只满足一位)


[root@repo ~]# find ./ -perm /777 –ls


运作:

[root@repo ~]# find ./ -perm -147 –ls (三位都必须满足)


    -print: 显示

    -ls:

类似ls -l的形式显示每一个文件的详细

    -ok COMMAND {} \;

每一次操作都需要用户确认

    -exec COMMAND {} \;


1、查找/var目录下属主为root并且属组为mail的所有文件;

find /var -user root -group mail

2、查找/usr目录下不属于root,bin,或student的文件;

find /usr -not -user root -a -not -user bin -a -not -user student

find /usr -not \( -user root -o -user bin -o -user student \)

3、查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件;

find /etc -mtime -7 -not \ ( -user root -o -user student \)

find /etc -mtime -7 -not -user root -a -not -user student

4、查找当前系统上没有属主或属组且最近1天内曾被访问过的文件,并将其属主属组均修改为root;

find / \( -nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \;

5、查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc.largefiles文件中;

find /etc -size +1M >> /tmp/etc.largefiles

6、查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息;

find /etc -not -perm /222 -ls    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值