2017-8-10 grep

来源:互联网 发布:淘宝的实名认证怎么弄 编辑:程序博客网 时间:2024/06/03 17:53



   1 .  grep

 对一些字母的查找显示红色 字体  grep --color=auto aa /home/wqp
  其中是你想要显示 带色的字母   其后面加上想要查看的目录或文件
  grep -A  -B  -C  
  例如:  grep -A 1 root  /etc/passwd
 就是显示匹配到的行和其后面的行,给一个数字   数字是显示几行    其中 B(before) C(center)

egrep =grep -E 拓展的正则表达式 其实与过grep很多命令相同
支持扩展的正则表达式实现类似于grep文本过滤功能:grep -E
-o , -i , -v , -q , -A , -B , -C ,
-G:表示支持基本正则表达式
扩展正则表达式的元字符

1:字符匹配

. :匹配任意单个字符
[ ]:匹配指定范围内的任意单个字符
[^ ]:匹配指定范围外的任意当个字符
[[:digit:]] [[:lower:]] [[:upper:]]  [[:alpha:]] [[:alnum:]] [[:punct:]] [[:space:]]

 2:次数匹配

*:任意次,0,1或多次
?:0次或1次,其前的字符是可有可无的
+:其前字符至少1次
{m}:其前的字符m次
{m,n}:至少m次,至多n次
{0,n}
{m,}


3:位置锚定

^:行首锚定
$:行尾锚定
\< 或 \b:词首锚定,用于单词模式的左侧
\> 或 \b:词尾锚定,用于单词模式的右侧

4:分组及引用

(分组和引用,也就搞定了Python的正则表达式)

( ):分组,括号内的模式匹配到的字符会被记录到正则表达式引擎的内部变量中
后向引用:/1, /2
[root@7 yhy2]# cat yhy
wo love wo
ni love ni
ta love ta
egrep "(w.).*\1" yhy
wo love wo

a | b:表示a或者b ---> grep "a|b" yhy
c|Cat:c或者cat
(c|C)at:cat或者Cat

    回顾wc命令:

wc:Word count命令
-l:显示文件的行数
-w:显示文件的单词数
-c:显示文件的字节数

 2   回顾cut命令


d :指定分割符
f:指定保留哪一列,例如-f 1,2,7 :表示保留第1,2,7列或字段,或者用 1-4:表示1到4列或字段

分组及引用  ():分组,括号内的模式匹配到的字符回被记录到正则表达式引擎的内部变量中后向引用:
:/1,/2
  [root@localhost wqp]# egrep "(i).*" /wqp/wqp.txt
wo ai wo
ni ai ni
ta ai ta
[root@localhost wqp]# egrep "(i).*\1" /wqp/wqp.txt
ni ai ni
[root@localhost wqp]# egrep "(o).*\1" /wqp/wqp.txt
wo ai wo
[root@localhost wqp]# egrep "(a).*\1" /wqp/wqp.txt
ta ai ta
[root@localhost wqp]#
 
 a | b :表示a或b --->grep “a|b“ / /  后接目录
 c|Cat : c或者Cat
 (c|C)at: cat或者Cat
 sort的排序命令讲解
  sort /etc/passwd: 会将所有的用户从a到z进行排序
 以下是一些常用的选项:  
 -t:指定字段分隔符,便于指定排序的字段
 -k:用于排序比较的字段
    sort -t: -k3 -n /etc/passwd  基于用户的uid的大小进行排序
 -n:基于数值大小排序  
    cut -d: -f3 /etc/passwd | sort  按字符进行排序
    cut -d: -f3 /etc/passwd | sort -n  按数值大小进行排序
 -r:逆序进行排序
    sort -t: -k3 -n -r /etc/passwd
 -f:忽略字符大小写
    这里是由于ASCII码的原因,因为A的ASCII码为:65,a的ASCII码为97
 -u:重复的行只保留一份
 sort -t: -k7 -u /etc/passwd
     练习:
  找出/etc/passwd的所有shell 一共有多少种?
  sort -t: -k7 -u /etc/passwd |wc -
l

   3 diff与patch的命令

 diff:逐行比较文件的不同,并且显示出来。
  patch: 打补丁工具,将补丁打到老文件里面,也就是diff左边的那个文件,使得老文件和新文件一样 
 格式:diff [选项] 老文件 新文件
 格式:patch [选项] 老文件
  可以根据创建文件 输入内容  
 直接使用vim编辑器编辑文件 vim /wqp.old    vim /wqp.new   
 vim /wqp/old            vim /wqp/new
  123                             123
  456                             456
  678
iff wqp.old wqp.new
2a3
> 789
将不同作为补丁输出到wqp.patch  diff wqp.old wqp.new >wqp.patch
将老文件打包 patch -i wqp.patch wqp.old
然后再次对两文件进行比较 diff w
qp.old wqp.new 此时已经没有什么不同的啦
还原补丁文件 patch -R -i wqp.patch wqp.old

 

  4vim文本编辑器

 三种模式 分别为1.编辑模式 2输入模式 3末行模式 其中最重要的是末行模式

   末行模式:具有命令的接口,在末行模式中可以直接的通过命令修改vim编辑器打开的文本文件

1.地址定界

 .:当前行
 $:最后一行
 %:全文
/pattern/:第一次被模式匹配到的行

2. 可实现编辑操作,同编辑命令一同使用

d:表示直接删除,要求直接跟在地址定界符号的后面,例如: :.,$表示当前行到最后一行删除。
y:用来复制地址定界匹配到的行
c:用来修改地址定界匹配到的行
w /path/to/file :将范围内的文本保存至文件中
r /path/to/file:将指定的文件的文本插入指定位置

3:查找

    /pattern:查找模式匹配到的所有字符串,向下查找, 然后在键盘上按n键会继续向下匹配
    ?pattern: 查找模式匹配到的所有字符串,向上查找,然后在键盘上按n键会继续向上匹配

4:查找并替换(极其重要)

    (1)格式:地址地接符s/要查找的内容/替换为的内容/修饰符
        要查找的内容:可以使用正则表达式
        替换为的内容:不能使用正则表达式,但是可以引用
            如果使用了分组,也就是在要查找的内容中使用了( )话,可以使用后向引用, \1表示引用第一个括号匹配的内容, \2表示第二个括号匹配的内容, \3表示第三个括号匹配的内容
            也可以直接引用查找模式匹配到的整个文本,直接使用匹配模式的全部文本:用&符号引用整个模式匹配到的文本

    (2)修饰符
        i:忽略大小写
        g:全局替换,也就是如果不加g的话,那么只是一行匹配一个,如果第二个被匹配了也不会被替换,如果加了g,那么一行中无论匹配到多少个都会被替换
(3)可把分隔符替换为非常用的字符
        例如:s@@@
             s###  
      练习
    1 . 复制/etc/grub2.cfg文件至/tmp目录中,用查找替换命令删除/tmp/grub2.cfg文件中以空白字符开头的行的行首的空白字符

:%s/^[[:space:]]\+//g  其中\+ 带有加号的表示一个或多个空格 \表示转义符
思考题:删除yhy用户家目录,如何还原(root用户重新创建yhy的家目录,拷贝/etc/skel/.bash* 的三个文件到/home/yhy/下即可
     chown用法
 用来更改某个目录或文件的用户名和用户组的
 chown 用户名:组名 文件路径(可以是就对路径也可以是相对路径)
 例1:chown root:root /tmp/tmp1
 是把tmp下的tmp1的用户名和用户组改成root和root(只修改了tmp1的属组).
 例2:chown -R root:root /tmp/tmp1
 就是把tmp下的tmp1下的所有文件的属组都改成root和root。   
  可以根据以上的例子来进行答题
 

原创粉丝点击