正则表达式
一、命令总结 1、chmod:修改文件的用户权限 语法: chmod [OPTION]... MODE[,MODE]... FILE... 参数: -R:递归修改 --reference=/path/to/somefilefile... chmod755file... 修改某类用户的某些权限: u:属主 g:属组 o:其他 a:所有 chmod用户类别=MODE... chmodu=rw,g=r/fiel... 修改某类的用户某位或某些位权限 chmod用户类别[-/+]MODEfiel... 示例1:修改/tmp/fstab文件的权限:属主为rwx,属组为rw,其他为rw [root@node1~]#cp/etc/fstab/tmp/ [root@node1~]#ll/tmp/fstab -rw-r--r--.1rootroot860Aug2808:21/tmp/fstab [root@node1~]#chmod755/tmp/fstab [root@node1~]#ll/tmp/fstab -rwxr-xr-x.1rootroot860Aug2808:21/tmp/fstab [root@node1~]# 示例2:修改/tmp/fstab文件的权限:删除属组和其他的执行权限 [root@node1~]#ll/tmp/fstab -rwxr-xr-x.1rootroot860Aug2808:21/tmp/fstab [root@node1~]#chmodgo-x/tmp/fstab [root@node1~]#ll/tmp/fstab -rwxr--r--.1rootroot860Aug2808:21/tmp/fstab [root@node1~]# 2、chown:修改文件的属主、属组,只有管理员使用此命令 语法: chown [OPTION]... [OWNER][:[GROUP]] FILE... 参数: -R递归修改(修改目录及其内部文件的属主) --reference=/path/to/somefilefile...把file的属主设定为与somefile的属主一样 chownUSERNAME:GRPNAMEfiel...同时改变属主和属组 chownUSERNAME,GRPNAMEfiel...同时改变属主和属组 chown:GROUPNAMEfiel...只修改属组
[root@node1tmp]#ll total4 -rwxr--r--.1rootroot860Aug2808:21fstab [root@node1tmp]#chowncentos:centos/tmp/fstab [root@node1tmp]#ll total4 -rwxr--r--.1centoscentos860Aug2808:21fstab [root@node1tmp]# 示例2:修改/tmp/fstab文件的属组为root用户 [root@node1tmp]#ll total4 -rwxr--r--.1centoscentos860Aug2808:21fstab [root@node1tmp]#chown:root/tmp/fstab [root@node1tmp]#ll total4 -rwxr--r--.1centosroot860Aug2808:21fstab [root@node1tmp]# 3、grep:基于正则表达式的文本过虑的工具 grep是一个支持正则表达式,基于正则表达式能够完成文本过虑的工具。根据用户指定的文本模式(正则表达元字符以及正常字符组合而成)对目标文件进行逐行搜索,显示能匹配到的行。 语法: grep [OPTIONS] PATTERN [FILE...] 参数: --color[=WHEN],--colour[=WHEN]-o:只显示被模式匹配到的内容 -i:ignore case,不区分字符大小写 -v:显示不能够被模式匹配到的行 -o:只显示被模式匹配的字符串 -E:使用扩展的正则表达式 -A NUM:显示匹配行数的后NUM行 -B NUM:显示匹配行数的前NUM行 -C NUM:显示匹配行数的前后各NUM行 示例1:搜索有root的行,并语法作色 [root@node1~]#grep--color=auto"root"/etc/passwd#语法作色 root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@node1~]# 示例2:引用变量搜索有root的行,并语法作色 [root@node1~]#user='root' [root@node1~]#grep--color=auto"$user"/etc/passwd#变量替换需要加双引号 root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@node1~]# 示例3:给grep临时添加别名grep,通过别名搜索有root的行,并语法作色 [root@node1~]#aliasgrep='grep--color=auto'#给grep添加别名 [root@node1~]#grep'root'/etc/passwd#不加--color=auto也可以匹配字符作色 root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@node1~]# 二、正则表达式 基本正则表达式:REGular EXPression 简写:REGEXP 是由元字符及正常字符所书写的模式,其中的元字符不表示字符本身的意义,而是用于表达控制或通配等功能; 基本正则表达式元字符: 字符匹配: .:匹配任意单个字符; []:匹配指定范围内的任意单个字符; [^]:匹配指定范围内的任意单个字符; [0-9]或[[:digit:]]:匹配任意单个数字; [^0-9]或[^[:digit:]]:匹配非数字的单个字符; [a-z]或[[:lower:]]:匹配任意单个小写字母; [A-Z]或[[:upper:]]:匹配任意单个大写字母; [0-9a-zA-Z]或[[:alnum:]]:匹配所有的字母或数字(区分大小写) [a-zA-Z]或[[:alpha:]]:匹配所有的字母 [[:space:]]:匹配所有的空白符 [[:punct:]]:匹配所有的标点符 次数匹配: 在期望匹配字符后面提供一个控制符,用于表达匹配其前面字符指定的次数; *:任意长度,前面的字符的任意长度,表示0次、1次或多次; .*:任意长度的任意字符,工作于贪婪模式,尽可以长的去匹配; ?:匹配其前的字符0次或1次:表示其左侧字符可有可无; +:1次或多次:表示其左侧字符必须要有1个,或表示其左侧字符至少出现1次; {m}:m次:表示其左侧字符精确出现m次; {m,n}:精确m次,至多n次:表示其左侧字符精确出现m次,最多出现n次; 位置锚定: ^:锚定行首 ^PATTERN $:锚定行尾 PATTERN$ ^PATTERN$:用模式来匹配整行; ^$:匹配纯空白行; 单词锚定: 由非特殊字符组成的连续的字符串; &;:锚定词首,也可用b:&;PATTERN,或bPATTERN &;:锚定词尾,也可以用b:PATTERN&;,或PATTERNb &;PATTERN&;:匹配PATTERN能匹配到的整个单词 分组:() 注意:分组中的模式,在某次的具体匹配过程中所匹配到的字符,可以被grep记忆(保存于内置的变量中,这些变量是1,2,...),因此,还可以被引用; 1:引用,模式中自左而右,由第一个左括号以及与之对应的右括号中的模式所匹配到的内容; 2:引用,模式中自左而右,由第二个左括号以及与之对应的右括号中的模式所匹配到的内容;
grep一般情况下支持基本正则表达式,可以通过参数-E支持扩展正则表达式,另外grep单独提供了一个扩展命令叫做egrep用来支持扩展正则表达式,这条命令和grep -E等价。虽然一般情况下,基本正则表达式就够用了。特殊情况下,复杂的扩展表达式,可以简化字符串的匹配。 grep:基本正则表达式 grep -E,egrep:扩展正则表达式 fgrep:fast,不支持使用正则表达式 扩展正则表达式就是在基本正则表达式的基础上,增加了一些元字符。 扩展正则表达式的元字符: *:任意长度,前面的字符的任意长度,表示0次、1次或多次; ?:匹配其前的字符0次或1次:表示其左侧字符可有可无; +:1次或多次:表示其左侧字符必须要有1个,或表示其左侧字符至少出现1次; {m}:m次:表示其左侧字符精确出现m次; {m,n}:精确m次,至多n次:表示其左侧字符精确出现m次,最多出现n次; 三、作业 1、显示/etc/passwd文件中以bash结尾的行 [root@node1tmp]#grep"bash&;"/etc/passwd root:x:0:0:root:/root:/bin/bash duyong:x:500:500::/home/duyong/:/bin/bash centos:x:501:502::/home/centos:/bin/bash ubuntu:x:502:503::/home/ubuntu:/bin/bash grid:x:498:498::/home/grid:/bin/bash [root@node1tmp]# 2、显示/etc/passwd文件中的两位数或三位数 [root@node1tmp]#grep"&;[0-9]{2,3}&;"/etc/passwd 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:FTPUser:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin vcsa:x:69:69:virtualconsolememoryowner:/dev:/sbin/nologin saslauth:x:499:76:Saslauthduser:/var/empty/saslauth:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separatedSSH:/var/empty/sshd:/sbin/nologin duyong:x:500:500::/home/duyong/:/bin/bash centos:x:501:502::/home/centos:/bin/bash ubuntu:x:502:503::/home/ubuntu:/bin/bash grid:x:498:498::/home/grid:/bin/bash [root@node1tmp]# 3、显示`netstat -tan`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行 [root@node1tmp]#netstat-tan|grep"LISTEN[[:space:]]*$" tcp000.0.0.0:220.0.0.0:*LISTEN tcp00127.0.0.1:250.0.0.0:*LISTEN tcp00:::22:::*LISTEN tcp00::1:25:::*LISTEN [root@node1tmp]# 4、添加用户bash、testbash、basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/passwd文件中用户名与其shell名相同的行 egrep用法 [root@node1~]#egrep"(&;[[:alnum:]]{4,8}&;).*1$"/etc/passwd sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt bash:x:503:504::/home/bash:/bin/bash nologin:x:506:507::/home/nologin:/sbin/nologin [root@node1~]# grep用法 [root@node1~]#grep"(&;[[:alnum:]]{4,8}&;).*1$"/etc/passwd sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt bash:x:503:504::/home/bash:/bin/bash nologin:x:506:507::/home/nologin:/sbin/nologin [root@node1~]# 5、显示当前系统上root、centos或者user1用户的默认shell和UID (请事先创建这些用户,若不存在) [root@node1~]#grep^"root|centos|user1"/etc/passwd|cut-d:-f1,3,7 root:0:/bin/bash centos:501:/bin/bash user1:507:/bin/bash [root@node1~]# 6、找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行 [root@node1~]#grep"&;[[:alnum:]_].*[[:alnum:]].*&;()"/etc/rc.d/init.d/functions fstab_decode_str(){ checkpid(){ __readlink(){ __fgrep(){ __umount_loop(){ __umount_loopback_loop(){ __pids_var_run(){ __pids_pidof(){ daemon(){ killproc(){ pidfileofproc(){ pidofproc(){ status(){ echo_success(){ echo_failure(){ echo_passed(){ echo_warning(){ update_boot_stage(){ success(){ failure(){ passed(){ warning(){ action(){ action_silent(){ strstr(){ confirm(){ get_numeric_dev(){ is_ignored_file(){ is_true(){ is_false(){ apply_sysctl(){ key_is_random(){ find_crypto_mount_point(){ init_crypto(){ [root@node1~]# 7、使用echo输出一个路径,而后egrep找出其路径基名;进一步的使用egrep取出其目录名 [root@node1~]#echo/etc/sysconfig/network-scripts/ifcfg-eth0|egrep"[^/]*[/]" /etc/sysconfig/network-scripts/ifcfg-eth0 [root@node1~]# [root@node1~]#echo/etc/sysconfig/network-scripts/ifcfg-eth0|egrep"[^/].*[/]"|egrep"[^/]*$"/etc/sysconfig/network-scripts/ifcfg-eth0 8、找出ifconfig命令执行结果中1-255之间的数字 [root@node1~]#ifconfig|grep"&;[1-9]{1,3}&;" eth0Linkencap:EthernetHWaddr00:0C:29:A2:3E:FC inetaddr:192.168.1.112Bcast:192.168.1.255Mask:255.255.255.0 inet6addr:fe80::20c:29ff:fea2:3efc/64Scope:Link UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1 RXbytes:87207171(83.1MiB)TXbytes:2464792(2.3MiB) inetaddr:127.0.0.1Mask:255.0.0.0 inet6addr:::1/128Scope:Host UPLOOPBACKRUNNINGMTU:65536Metric:1 [root@node1~]# (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |