【unix学习】文件处理3—正则表达式和grep命令

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Agly_Clarlie/article/details/78430910

unix文件处理—正则表达式和grep命令

正则表达式

  1. 使用\{\}匹配模式结果出现的次数
    pattern\{n\} 用来匹配前面pattern出现次数。n为次数
    pattern\{n,\}m 含义同上,但次数最少为n
    pattern\{n,m\} 含义同上,但pattern出现次数在n与m之间,n , m为0-255中任意整数
    简单的例子:
    匹配字母A出现两次,并以B结尾,操作如下:
    A\{2\}B
    匹配值为AAB
    匹配A至少4次,使用:
    A\{4,\}B
    可以得结果AAAAB或AAAAAAAB,但不能为AAAB。
    如给出出现次数范围,例如A出现2次到4次之间:
    A\{2,4\}B
    则结果为AAB、AAAB、AAAAB,而不是AB或AAAAAB等。
  2. 复杂的例子:前4个字符是数字,接下来是xx,最后4个也是数字,操作如下:
    [0-9]\{4\}xx[0-9]\{4\}
  3. 一些正则表达式的综合例子:
    ^the 以the开头行
    [mayMAY] 对包含may大写或小写字母的行
    ^ USER$ 只包含USER的行
    \. 带句点的行
    ^d..x..x..x 对用户、用户组及其他用户组成员有可执行权限的目录
    [ ^ $ ] 对空行
    [^0-9\$] 对非数字或美元标识
    [^0-9A-Za-z] 对非数字或字母
    [0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\} 对日期格式dd-mm-yyyy
    [0-9]\{3}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\} 对IP地址格式nnn. nnn.nnn.nnn
  4. 匹配空行并显示对应的行号
    grep -n “^$” /etc/files

grep命令

Purpose

Search the files for the given pattern, string, or expression

format

grep [options] pattern [file-list]

Options


i Ignore the case of letters
n Print line numbers along with matched lines
v Print nonmatching lines
c Print the number of matching lines only
w Search for the given pattern as a string
l Print only the names of files with matching lines


格式:

grep [OPTIONS] PATTERN [FILE…]
grep常用选项:
-c 只输出匹配行的计数。
-i 不区分大小写(只适用于单字符)。
-h 查询多文件时不显示文件名。
-l 查询多文件时只输出包含匹配字符的文件名。
-n 显示匹配行及行号。
-v 显示不包含匹配文本的所有行。
-w 匹配单词

实例

  1. 匹配CS单词
[s14516@gdufs]$grep -w CS /tmp/student_record
[s14516@gdufs]$grep [^E]CS /tmp/student_record
  1. 匹配CS结果的行数
[s14516@gdufs]$grep -c -w CS /tmp/student_record
  1. 显示出现的行号
[s14516@gdufs]$grep -n -w CS /tmp/student_record

3:Al    Davis   CS      2.63
  1. 包含某个单词的文件
    -l
[s14516@gdufs]$grep -l 'John' /tmp/*
/tmp/back.tar
/tmp/backup1.tar
/tmp/backup.tar
/tmp/donors
/tmp/paper.tar
/tmp/student_record
  1. 忽略大小写
    -i
[s14516@gdufs]$grep -n -i -w CS /tmp/student_record
  1. 查找不匹配某个单词的行
    -v
[s14516@gdufs]$grep -v -i -w CS /tmp/student_record
  1. 查询多个文件
    如果要在当前目录下所有.doc文件中查找字符串“sort”,方法如下:
grep "sort" *.doc

或在所有文件中查询单词“sort it”

grep "sort it" *
  1. 行匹配的计数
grep -c "root" /etc/passwd
  1. 显示满足匹配模式的所有行及行号
grep -n root /etc/passwd
  1. 显示非匹配行
    grep -v “#” /etc/inittab

grep和正则表达式

  1. 模式范围
grep "50[12]" /etc/passwd
  1. 匹配任意字符
grep "x..x" /etc/passwd
grep "x[a-z][a-z]x" /etc/passwd
  1. 模式出现机率
grep "0\{2,\}" /etc/passwd
  1. 或的正则表达,需要用egrep 命令,不支持grep
[s14516@gdufs]$egrep -w '\<CS|IBM' /tmp/student_record
  1. 查看系统中的用户但不包括root
who | grep -v ^root
展开阅读全文

没有更多推荐了,返回首页