标签:
• 正则表达式
• sed
• awk
正则表达式
使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。
1.特点:
(1)灵活性、逻辑性和功能性非常的强;
(2)可以迅速地用极简单的方式达到字符串的复杂控制。
(3)对于刚接触的人来说,比较难懂
2.应用对象:文本
3.匹配模式
次数匹配:
. 匹配任意单个字符
*:匹配其前面字符任意次 (>=0)
\?:匹配其前面的字符1次或0
\{m,n\}:匹配其前面的字符至少m次,至多n次 (n>m)
可以没有上限,但必须有下限
位置匹配:
^:行首,此字符后面的任意内容必须出现在行首
$:行尾,此字符前面的任意内容必须出现在行尾
^$:空白行
\<:其后面的任意字符必须作为单词首部出现
\>:其前面的任意字符必须作为单词尾部出
\<\>:精确匹配
\<root\>:查找root单词
分组:后向引用
\(love\).*\1:引用第一个左括号,以及与之对应的右括号所包括的内容
正则表达式分两类:
1.基本正则表达式
2.扩展正则表达式
使用grep
-v 不匹配
-n 显示行号
-A N:显示找到的结果,并显示后N行
-B N:显示找到的结果,并显示前N行
-C N:显示找到的结果,并显示前后N行
-E 使用扩展正则表达式 grep -E = egrep
扩展正则表达式:
字符匹配:跟基本正则表达式是一样的
不显示以#开头或;开头的行
[root@pagoda63 ~]# egrep -v "^#|^;" /etc/samba/smb.conf
次数匹配:
*:匹配其前面字符任意次 (>=0)
?:不需要加\ 匹配其前面的字符1次或0次
+:匹配其前字符至少一次,类似于\{1,\} ?和+的组合相当于*
[root@station2 test]# grep -E ‘^[[:space:]]+‘ /etc/grub.conf
{m,n}:不需要加\
位置匹配:跟基本正则表达式是一样
===========================================================
sed
strem editor 流编辑器
sed 是一种在线编辑器,它一次处理一行内容。处理时,
把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),
接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,
除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作
语法:
sed [options] ‘[command]’ [filename]
options:
-n 抑制自动(默认的) 输出 *** 读取下一个输入行
-e 执行多个sed指令
-f 运行脚本
-i 编辑文件内容 ***
-i.bak 编辑的同时创造.bak的备份
-r 使用扩展的正则表达式 ***
command:
a 在匹配后追加 ***
i 在匹配后插入 ***
p 打印 ***
d 删除 ***
r/R 读取文件/一行
w 另存
s 查找
c 替换
y 替换
h/H 复制拷贝/追加模式空间(缓冲区)到存放空间
g/G 粘贴 从存放空间取回/追加到模式空间
x 两个空间内容的交换
n/N 拷贝/追加下一行内容到当前
D 删除\n之前的内容
P 打印\n之前的内容
b 无条件跳转
t 满足匹配后的跳转
T 不满足匹配时跳转
实例:
1:显示/etc/passwd第三行
[root@pagoda63 ~]# sed -n ‘3p‘ /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
2:显示文件前三行
[root@pagoda63 ~]# sed -n ‘1,3p‘ /etc/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
3:显示文件除前三行之外的全部内容
[root@pagoda63 ~]# sed -n ‘1,3!p‘ /etc/passwd
4:在文件头加入###
[pagoda@mylab ~]$ sed ‘1i###‘ /etc/passwd >a.txt
5: 在文件尾加入@@@
[pagoda@mylab ~]$ sed ‘$a@@@‘ /etc/passwd >b.txt
6:把文件第三行替换成“$$$
[pagoda@mylab ~]$ sed ‘3c$$$‘ /etc/passwd >c.txt
[pagoda@mylab ~]$ head -4 c.txt
7:把文件的第二行到第四行复制到文件的末尾
[pagoda@mylab ~]$ sed ‘2,4H;$G‘ /etc/passwd > d.txt
sed中的正则:
1:删除文件中空行
[pagoda@mylab ~]$ sed ‘/^$/d‘ /etc/passwd >e.txt
2:把fstab中包含ext4的记录(行)写入新的文件中
[pagoda@mylab ~]$ sed ‘/ext4/w newfstab‘ /etc/fstab
======================================================================
awk
AWK 是一种用于处理文本的编程语言工具
任何awk语句都是由模式和动作组成,一个awk脚本可以有多个语句。模式决定动作语句的触发条件和触发时间。
特殊字段:
BEGIN语句设置计数和打印头部信息,在任何动作之前进行。
END语句输出统计结果,在完成动作之后执行。
分隔符默认是空格,可以用-F, 改变成逗号为分隔符 -F, 或改成冒号 -F:
实例:
1.自定义年月日的显示方式:
[pagoda@mylab ~]$ date | awk ‘{print "Year:"$6 "\t month:"$2 "\t days:"$3}‘
2:显示所有内容:
[pagoda@mylab ~]$ awk ‘{print $0}‘ /etc/passwd
3:显示第一列和第三列的内容
[pagoda@mylab ~]$ awk -F: ‘{print $1,$3}‘ /etc/passwd
4:打印一个文件头,打印一个文件尾
特殊字段:
BEGIN语句设置计数和打印头部信息,在任何动作之前进行。
END语句输出统计结果,在完成动作之后执行。
[pagoda@mylab ~]$ awk -F: ‘BEGIN {print "name uid bash\n"}{print $1,$3,$7} END{print"End of class passwd"}‘ /etc/passwd
5:第3列等于0的那些记录
[pagoda@mylab ~]$ awk -F: ‘{if($3=="0")print $0}‘ /etc/passwd
root:x:0:0:root:/root:/bin/bash
6:第3列大于等于100的那些记录
[pagoda@mylab ~]$ awk -F: ‘$3>=100 {print $0}‘ /etc/passwd
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
saslauth:x:498:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
pagoda:x:500:500::/home/pagoda:/bin/bash
标签:
原文地址:http://www.cnblogs.com/ylion/p/4738538.html