第四周作业(alias、grep、正则表达式、find命令的基本用法)

1.命令别名 alias的用法

通过alias命令实现:

(1)alias不带任何选项将显示当前shell下所有的可用的命令别名的信息,其中,等号之前表示新的命令名称,等号右边表示的是要替代的命令及其参数。

(2)定义别名:

alias new_name='old_name options'

注:通过命令行定义的命令别名只对当前shell有效,如果想永久有效,需要定义在配置文件中

仅对当前用户有效,其配置文件为:~/.bashrc

对所有用户都有效的配置文件为/etc/bashrc

 

 2. grep

grep基本介绍:

grep是一款文本过滤工具

作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查,打印匹配到的行

模式:由正则表达式字符及文本字符所编写的过滤条件

正则表达式:是由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符字面的意思,而是表示控制或通配的功能

正则表达式分两类:基本正则表达式和扩展正则表达式,其中grep支持正则基本正则表达式,egrep支持扩展正则表达式

grep语法:

grep [OPTIONS] PATTERN [FILES...]

             --color   高亮显示匹配到的字符串

             -v  :  显示不能被匹配到的行

           -i    :   忽略字符大小写

             -o  : 仅显示匹配到的字符串

        -q   :   静默模式,不输出任何信息

基本正则表达式元字符:

字符匹配:

   . :匹配任意单个字符

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

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

其中:[:alnum:]表示所有的字母和数字

   [:alpha:]表示所有的字母(不区分大小写)

   [:dight:]表示所有的数字

   [:lower:]表示所有的小写字母

   [:upper:]表示所有的大写字母

   [:space:]表示所有的空白字符

   [:punct:]表示所有的标点符号

次数匹配:

用于在要指定的字符后面,用于指定前面的字符要出现的次数

* :匹配前面的的字符任意次,仅表示次数

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

\? :表示匹配前面的字符0次或1次,即前面的字符可有可无

\+ : 表示匹配前面的字符至少一次

\{m\} : 匹配前面的字符m次

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

\{0,n\} :表示匹配前面的字符至多n次

\{m,\} :表示匹配前面的字符至少m次

位置锚定:

对特定位置进行定位

^:行首锚定:用于模式的最左侧

¥:行尾锚定:用于模式的最右侧

^PATTERN :用于模式匹配整行

        ^$:空行,不含有空格的行

        ^ [:space:]*$:空行,包含有空格的行

  \<:词首锚定,用于单词匹配的左侧

  \>:词尾锚定,用于单词匹配的右侧

  \<PATTERN\>:匹配整个单词

分组:分组是指将一个或多个字符捆绑在一起,当做一个整体来处理,其符号为: \(\)

例如:\(xy\)*ab:表示xy这个整体可以出现任意次

注:1 分组括号中的模式匹配到的内容会被正则表达式记录在内部变量内,这些变量命名为:\1,\2,\3...

      \1:表示的是从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符

      2 后向引用:引用前面分组括号中的模式所匹配到的字符,而非模式本身

 

扩展正则表达

字符匹配:

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

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

基本与基本正则表达式相同

次数匹配:

*:任意次

?:0次或1次

+ :至少1次

{m}:精确匹配m次

{m,n}:至少m次,至多nci

{m,}:至少m次

{0,n}:至多n次

锚定:与基本正则表达式相同

分组:():用括号括起来表示要引用的内容,不需要进行转义

后向引用:\1,\2,\3

 

本周作业作业:

(1)定义一个对所有用户都生效的命令别名,例如:lftps='lftp 172.168.0.1/pub'

演示:vim /etc/bashrc  在末行加上如下命令,并且加上注释,重启后生效

     

也可以通过bash进程重新读取配置文件:

source /path/to/config_file  或  ./path/to/config_file

    

(2)显示 /etc/passwd文件中不以 /bin/bash结尾的行

               grep -v "/bin/bash$"  /etcpasswd

             

           (3)显示 /etc/passwd文件中,包含2位数字或者三位数字的行

                      grep  "\<[0-9]\{2,3\}\>" /etc/passwd

            

 

     (4)显示/proc/meminfo文件中以大写或小写S开头的行,用三种方式实现

                   

               (5)使用echo输出一个绝对路径,使用egrep取出路径名,类似执行dirname /etc/passwd的结果

                  echo  "/etc/passwd" | egrep -o  "[^/]+/?$" | cut -d/ -f1

           

 

             (6) 找出ifconfig中的ip地址,要求结果只显示ip地址

                  ifconfig | grep -o -E "\<["

(7)编写脚本,实现自动添加三个用户,并计算这三个用户的uid之和

         

(8)vim 定制自动缩进4个字符

在末行模式下输入 set ai   就可以保证此行再输入命令前缩进了4个字符,当设置了自动缩进后,按ENTER键时就会按照此行缩进字符自动缩进

(9)find用法以及常用用法:

find命令是在目录层级结构中查找符合条件的文件,所以它可以同时查指定目录及其子目录。同时它还可以对搜索结果执行一定的文件处理操作。

命令语法:

find [选项] [查找路径]... [查找条件] [处理操作]

其中:

(1)查找路径:缺省值为当前路径,路径可有有多个,路径之间以空格隔开

(2)查找条件:

    -name "文件名称”,支持通配符

    -iname  "文件名称“ ,与name基本相同,但是它忽略字母大小写

     -user  username 查找指定用户属主的文件,同样还有-uid  UID

     -group  groupName查找属于指定组的文件,同样还有-gid   GID

      -type   filetype:根据文件类型查找,常用的类型为"f"普通文件,"d"目录文件

      -size   [+|-]数字单位:常用单位为k、M、G,+号表示大于,-号表示小于等于,无符号则以10M为例,表示9M<文件大小<=10M。

     -atime  [+|-]数字  :表示文件的最后被访问时间,以天为单位,+号表示大于等于天数+1,-号表示小于天数,无符号则以10为例,表示 10<=文件最后访问时间<11 。同样还有-mtime表示文件内容数据的最后修改时间,-ctime表示文件的元数据的最后修改时间

    -amin表示文件的最后被访问时间,以分钟为单位,规则与-atime一样。同样还有-mmin表示文件内容数据的最后修改时间  和-cmin 表示文件的元数据最后修改时间

    -perm [+|-]  MODE  表示根据文件的访问权限为条件。

    -a表示前后两个条件要同时满足(与的关系)

    -o表示前后两个条件满足一个即可(或的关系)

    -not 或 !表示后面的条件取反。

(3)处理操作

    -print 显示结果在屏幕上,这是默认操作

    -ls   对结果文件使用ls -l 长格式显示有屏幕上。

    -delete:  删除查找到的文件

    -fls  /路径/结果文件名 :  把结果以长格式信息保存到指定的文件中

    -exec  命令 {}  \;   :表示对查找到的文件执行相应的命令,{}表示查找到的文件在命令中的占位符。

    -ok   命令  {} \;     :与exec相同,但是对每个文件进行操作前,会弹出提示信息等用户确认。

常用用法的实例演示如下:

$find  /etc -name hosts

在目录/etc中查找文件hosts

$find  /  -size +204800

在根目录下查找大于100MB的文件,size是以块为单位,2块=1K

$find   /tmp  -user  user1

在/tmp目录下查找所有者为user1的文件

$ find  /etc  -cmin -5

在/etc下查找5分钟内被修改过属性的文件和目录

$ find  /etc  -size  +163840  -a  -size -204800

在/etc下查找大于80MB小于100MB的文件

$ find  /etc  -name hosts  -exec  ls  -l {} \;

 

posted on 2018-12-12 08:58  向北00  阅读(487)  评论(0编辑  收藏  举报

导航