shell中的文本处理正则表达式

#1

grep

Global search regular expression and print out the line
“全面搜索研究正则表达式并显示出来"
grep` 命令是一种强大的文本搜索工具 , 根据用户指定的“模式”对目标文本进行匹配检查 , 打印匹配到的行由正则表达式或者字符及基本文本字符所编写的过滤条件”
grep 命令 #文本搜索#
格式:
grep 【参数】 匹配条件 处理文件

参数:
-o
-E
^westos ##westos开头
westos$ ##westos结尾
westos> ##
\< ##开始
egrep ## egrep = grep -E

[root@desktop251 mnt]# cp /etc/passwd /mnt/
[root@desktop251 mnt]# ls
passwd
[root@desktop251 mnt]# cat passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
root:roothello:westos
root:helloroot:westos
ROOT:root:westos
[root@desktop251 mnt]# grep root passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
root:roothello:westos
root:helloroot:westos
ROOT:root:westos
[root@desktop251 mnt]# grep  -o root passwd 
root
root
root
root
root
root
root
root
root
[root@desktop251 mnt]# grep -E root\> passwd
[root@desktop251 mnt]# grep -E "root\>" passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
root:roothello:westos
root:helloroot:westos
ROOT:root:westos
[root@desktop251 mnt]# grep -E "<root>" passwd 
[root@desktop251 mnt]# grep -E "\<root\>" passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
root:roothello:westos
root:helloroot:westos
ROOT:root:westos
[root@desktop251 mnt]# grep  "\<root\>" passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
root:roothello:westos
root:helloroot:westos
ROOT:root:westos
[root@desktop251 mnt]# grep -E "^\<root\>" passwd 
root:x:0:0:root:/root:/bin/bash
root:roothello:westos
root:helloroot:westos
[root@desktop251 mnt]# grep -E "\<root\>$" passwd 
[root@desktop251 mnt]# grep -E -i "\<root\>" passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
root:roothello:westos
root:helloroot:westos
ROOT:root:westos

“x..y”
“x…”
“…y”

[root@desktop251 mnt]# cat /mnt/file 
xy
xxy
xxxxy
xyyyyy
yyyyy
xxxxx
[root@desktop251 mnt]# grep -E "x.." file
xxy
xxxxy
xyyyyy
xxxxx
[root@desktop251 mnt]# grep -E "x..\" file
> ^C
[root@desktop251 mnt]# grep -E "x..\" file
> ^C
[root@desktop251 mnt]# grep -E "x..\>" file
xxy
xxxxy
xxxxx
[root@desktop251 mnt]# grep -E "\<x..\>" file 
xxy
[root@desktop251 mnt]# grep -E "\<x...\>" file 
[root@desktop251 mnt]# grep -E "\<x....\>" file 
xxxxy
xxxxx
[root@desktop251 mnt]# grep -E "\<x...y>" file 
[root@desktop251 mnt]# 
[root@desktop251 mnt]# grep -E "\<x....y>" file 
[root@desktop251 mnt]# grep -E "\<x...y\>" file 
xxxxy
[root@desktop251 mnt]# grep -E "\<x....y\>" file 
xyyyyy
[root@desktop251 mnt]# grep -E "\<...y\>" file 
[root@desktop251 mnt]# grep -E "...y\>" file 
xxxxy
xyyyyy
yyyyy
[root@desktop251 mnt]# grep -E "...y" file 
xxxxy
xyyyyy
yyyyy

grep 中字符的匹配次数设定

  • 字符出现 [0- 任意次 ]
    \? 字符出现 [0-1 次 ]
    + 字符出现 [1- 任意次 ]
    {n} 字符出现 [n 次 ]
    |{m,n} 字符出现 [ 最少出现 m 次,最多出现 n 次 ]
    {0,n} 字符出现 [0-n 次 ]
    {m,} 字符出现 [ 至少 m 次 ]
    (xy){n}xy 关键字出现 [n 次 ]
    .* 关键字之间匹配任意字符
[root@desktop251 mnt]# grep -E "x*y" file
xy
xxy
xxxxy
xyyyyy
yyyyy
[root@desktop251 mnt]# grep -E "x?y" file
xy
xxy
xxxxy
xyyyyy
yyyyy
[root@desktop251 mnt]# grep -E "\<x?y" file
xy
xyyyyy
yyyyy
[root@desktop251 mnt]# grep -E "\<x{2}y" file
xxy
[root@desktop251 mnt]# grep -E "\<x{,2}y" file
xy
xxy
xyyyyy
yyyyy
[root@desktop251 mnt]# grep -E "\<x{2,}y" file
xxy
xxxxy
[root@desktop251 mnt]# grep -E "\<x{1,}y" file
xy
xxy
xxxxy
xyyyyy
[root@desktop251 mnt]# grep -E "\<x+y" file
xy
xxy
xxxxy
xyyyyy
[root@desktop251 mnt]# grep -E "xy+" file
xy
xxy
xxxxy
xyyyyy
[root@desktop251 mnt]# grep -E "(xy)+" file
xy
xxy
xxxxy
xyyyyy
[root@desktop251 mnt]# grep -E "(xy)+\>" file
xy
xxy
xxxxy

grep 正则表达式与扩展正则表达式
正规的 grep 不支持扩展的正则表达式子 , 竖线是用于表示”或”的扩展正则表达式元字符 , 正规的 grep 无法识别加上反斜杠 , 这个字符就被翻译成扩展正则表达式 , 就像 egrp和grep -E 一样

#2

sed

stream editor'用来操作纯 ASCII 码的文本’
处理时 , 把当 前处理的行存储在临时缓冲区中 , 称为“模式空间” (pattern space) 可以指定仅仅处理哪些行sed 符合模式条件的处理 不符合条件的不予处理处理完成之后把缓冲区的内容送往屏幕接着处理下一行 , 这样不断重复 , 直到文件末尾

sed 对字符的处理
p “显示”
d “删除”
a “添加”
c “替换”
w “写入”
i “插入”

p 模式操作
sed -n ‘/:/p’ fstab
sed -n ‘/UUID$/p’ fstab
sed -n ‘/^UUID/p’ fstab
sed -n ‘2,6p’ fstab
sed -n ‘2,6!p’ fstab

操作:

[root@desktop251 mnt]# cp /etc/fstab  .
[root@desktop251 mnt]# ls
fstab  ip_show.sh
[root@desktop251 mnt]#  cat fstab 

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
[root@desktop251 mnt]# grep "#" fstab 
#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
[root@desktop251 mnt]# sed -n '/#/P'  fstab 
#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
-------------------------------------------
[root@desktop251 mnt]# cp /etc/fstab  .
[root@desktop251 mnt]# vim fstab 
[root@desktop251 mnt]# sed -n '/#/p' -i fstab 
--------------------------------------------
[root@desktop251 mnt]# cp /etc/fstab  .
[root@desktop251 mnt]# sed -n '/#/p' fstab  > file123
[root@desktop251 mnt]# cat file123 
#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
------------------------------------------------
[root@desktop251 mnt]# cat fstab 

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
dnaskdhkadskajdlajlkdjald-UUID
[root@desktop251 mnt]# sed -n '/UUID/p' fstab 
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
dnaskdhkadskajdlajlkdjald-UUID
[root@desktop251 mnt]# sed -n '/^UUID/p' fstab 
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
[root@desktop251 mnt]# sed -n '/UUID$/p' fstab 
dnaskdhkadskajdlajlkdjald-UUID

-------------------------------------------------
[root@desktop251 mnt]# cat -n fstab  | sed -n '5p'
     5  #
[root@desktop251 mnt]# cat -n fstab  | sed -n '3,5p'
     3  # /etc/fstab
     4  # Created by anaconda on Wed May  7 01:22:57 2014
     5  #
[root@desktop251 mnt]# cat -n fstab  | sed -n '3,5!p'
     1  
     2  #
     6  # Accessible filesystems, by reference, are maintained under '/dev/disk'
     7  # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
     8  #
     9  UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
    10  dnaskdhkadskajdlajlkdjald-UUID
[root@desktop251 mnt]# cat -n fstab  | sed -ne '3p' -ne '5p'
     3  # /etc/fstab
     5  #
[root@desktop251 mnt]# cat -n fstab  | sed -ne '3p;5p;8p'
     3  # /etc/fstab
     5  #
     8  #

d 模式操作
sed ‘/^UUID/d’ /etc/fstab
sed ‘/^#/d’ /etc/fstab
sed ‘/^$/d’/etc/fstab
sed ‘1,4d’/etc/fstab
sed ‘/^UUID/!d’ /etc/fstab
操作:

[root@desktop251 mnt]# sed '/^UUID/d' fstab 

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
dnaskdhkadskajdlajlkdjald-UUID
[root@desktop251 mnt]# sed '/^#/d' fstab 

UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
dnaskdhkadskajdlajlkdjald-UUID
[root@desktop251 mnt]# sed 'UUID$/d' fstab 
sed: -e expression #1, char 1: unknown command: `U'
[root@desktop251 mnt]# sed '/UUID$/d' fstab 

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
[root@desktop251 mnt]# sed '1,4d'  fstab 
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
dnaskdhkadskajdlajlkdjald-UUID
[root@desktop251 mnt]# sed -n '/^UUID/!d' fstab 
[root@desktop251 mnt]# cat fstab 

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
dnaskdhkadskajdlajlkdjald-UUID
[root@desktop251 mnt]# sed  '/^UUID/!d' fstab 
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1

a 模式
sed ‘/^UUID/a \hello sed /etc/fstab
sed ‘/^UUID/a \hello sed\nwestos /etc/fstab’
操作:

[root@desktop251 mnt]# cat fstab 

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
[root@desktop251 mnt]# sed '/^UUID/a hello' fstab 

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
hello
[root@desktop251 mnt]# sed '/^UUID/a hello\n' fstab 

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
hello

[root@desktop251 mnt]# sed '/^UUID/a hello\nsed' fstab 

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
hello
sed
[root@desktop251 mnt]# sed '/^UUID/a hello\nnsed' fstab 

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
hello
nsed
[root@desktop251 mnt]# sed '/^UUID/a hello\nsed' fstab 

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
hello
sed
[root@desktop251 mnt]# cat fstab 

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
[root@desktop251 mnt]# sed '/UUID$/a hello' fstab 

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
[root@desktop251 mnt]# sed '/UUID$/a hello' fstab 

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
[root@desktop251 mnt]# sed '/UUID$/a hello\nsed\ntest' fstab 

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
[root@desktop251 mnt]# sed '/^UUID/a hello\nsed\ntest' fstab 

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
hello
sed
test

i 模式
操作:

sed '/^UUID/i\hello sed\nwestos /etc/fstab'
[root@desktop251 mnt]# sed '/^UUID/a hello\nsed\ntest'  -i  fstab  
[root@desktop251 mnt]# cat fstab 

#
# /etc/fstab
# Created by anaconda on Wed May  7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 /                       xfs     defaults        1 1
hello
sed
test

猜你喜欢

转载自blog.csdn.net/lx543733371/article/details/80291394