linux基础(33)--正则表达式--RHEL6.5

来源:互联网 发布:java orm框架 阿里 编辑:程序博客网 时间:2024/06/05 01:56

  本文主要讲解正则表达式、grep、sed、awk、cut的使用。

1. 正则表达式

  正则表达式又称正则表示法、常规表示法。

  正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,是指用来描述或者匹配一系列符合某个句法规则的字符的字符串。

  正则表达式即用某种模式去匹配一类字符串。

2. grep 

 参数:

  -i   忽略大小写

  -v  反转

  -n 显示行号

  --color 关键词高亮

  以root开头的行:

  grep "^root" /etc/passwd

  以root结尾的行:

  grep "root$" /etc/passwd

  包含root的行,显示行号, 高亮:

  grep -n "root" /etc/passwd  --color

  * 重复前面字符>=0次:

  grep "root*" /etc/passwd --color

  [list] 字符集合:

  grep [a-z] /etc/passwd --color

  "^"放在"[ ]"里面表示否的意思,显示不以#开头的行:

  grep ^[^#] /etc/passwd    #等价于   grep -v "^#" /etc/passwd

  包含数字的行:

  grep [0-9] /etc/passwd --color

  以大写字母开头的行:

  grep "^[A-Z]" /etc/passwd --color

  不以大写字母开头的行:

  grep "^[^A-Z]" /etc/passwd --color    #等价于 grep -v "^[A-Z]" /etc/passwd --color

  显示空白行及其行号:

  grep -n "^$" /etc/passwd --color

  "." 代表有一个字符:

  以r开头t结尾的行:

  grep "^r.*t$" /etc/passwd --color

  精确匹配, 即不会拆分单词:

  grep "\<root\>" /etc/passwd --color

3. sed

  sed是一个流编辑器,与vim区别是sed不需要进行交互。

  sed 编辑器逐行处理文件的内容,正在处理的内容存放在模式空间,处理完成后按照选项的规定进行输出。

  sed是一种在线编辑器,一次处理一行的内容,处理时把当前处理的行存储在临时缓冲区中,成为模式空间,接着使用sed处理缓冲区中的内容,处理完成后把缓     冲区的内容发送往屏幕,接着处理下一行,不断重复,直到文件的结尾,但是文件的内容并未发生改变,想要改变后的文件可以采用重定向的方式完成。

  替换: root换为AAA

  sed "s/root/AAA/" /etc/passwd  #默认只是替换第一次出现的字符串,全局替换使用g即可, sed "s/root/AAA/g" /etc/passwd

  此处分隔符使用的是"/", 当"/"不方便时可以使用其他合适的分隔符进行替代。

  root两侧加上括号:

  sed "s/root/(&)/" /etc/passwd

  注释掉所有以字母开头的行:

  sed "s/^[a-z]/#&/g" /etc/passwd

  多条件 -e:

  sed -e "3,5s/root/AAA/" -e 9,11s/root/AAA/" /etc/passwd  > a.txt   #从指定行范围内匹配,并将结果重定向到a.txt

  显示文件地行:

  sed -n "3p" /etc/passwd

  显示前三行:

  sed -n "1,3p" /etc/passwd

  显示全文内容,除了第三行:

  sed -n "1,3!p" /etc/passwd

  显示文件第三行和之后的三行:

  sed -n "3, +3p" /etc/passwd

  文件头插入###:

  sed "1i###" /etc/passwd > a.txt

  文件尾插入@@@:

  sed "$a@@@" /etc/passwd > a.txt

  在第2行后插入两行内容:

  sed "2a hello\

  world" /etc/passwd

  文件第3行换成$$$:

  sed "3c$$$" /etc/passwd > a.txt

  -i 选项可以直接修改文件的内容:

  sed -i "s/root/AAA" /etc/passwd

  H 复制, G粘贴,把文件的3-5行复制到文件的末尾:

  sed "2,4H;$G" /etc/passwd > a.txt

  d 删除行, 删除空行:

  sed "/^$/d" /etc/passwd > a.txt

  w 写入到新的文件,把包含root的行写入到文件a.txt中:

  sed "/root/w a.txt" /etc/passwd

4. awk

  awk 是一个优秀的文本处理工具,是一个遇强则强的工具。

  简单说awk是一种用户文件处理的编程语言。

  任何awk语句都是由模式和动作组成,一个awk脚本可以有很多的语句,模式决定动作语句的触发条件和触发时间。

  特殊字段:

  BEGIN语句设置计数和头部信息,在任何动作之前进行。

  END语句输出统计结果,在完成动作之后执行。

  分隔符默认是空格,可以使用-F自行指定。

  获取网卡eth0的ip地址:

  ifconfig | grep "\<inet\>" | awk "NR==1" | awk  '{print $2}' |  awk -F: '{print $2}'

  获取UID大于500的用户的用户名和用户登录shell:

  cat /etc/passwd | awk -F: '$3>500 {print $1 "\t" $7}'

  获取UID大于500且登录shel为/bin/bash的用户名:

  cat /etc/passwd | awk -F: '$3>500 && $7=="/bin/bash" {print $1}'

  BEGIN先于一切动作之前执行:

  cat /etc/passwd | awk -F: END{print "username"} $3 > 500 && $7 == "/bin/bash" {print $1} '

  END在一切动作之后执行:

  cat /etc/passwd | awk -F: 'BEGIN{size=10;} $3 > 500 END{print "size is" size / 10}'

5. cut

  cut是一个选取命令,即将一段数据经过分析获取我们想要的部分。

  -b   字节为单位进行分割

  -c   字符为单位进行分割

  -d  自定义分隔符,默认为制表符

  -f   与-d一起使用,指定显示哪个区域

   以字节为单位分割,显示第3个字节包含数字9-12的行:

   tail -3 /etc/passwd | cut -b 3, 9-12

   显示每行的第3-6个字符:

   cat /etc/passwd | cut -b 3-6

   cut只能处理以一个空格分割的文本,多个空格间隔则无法处理。

   

  

  

  

  

  


  

  

  

  

  

  

 

0 0
原创粉丝点击