您的位置:首页 > 其它

正则表达式

2015-04-21 14:25 155 查看
1.grep (查找字符串)

格式:grep [-acinv] '搜索字符串' filename

-a:在二进制文件中,以文本文件的方式搜索数据

-c:计算找到‘搜索字符串’的次数

-i:忽略大小写的不同

-n:输出行号

-v:反向搜索,即显示出没有‘搜索字符串’内容的那一行

1.1搜索特点字符

eg: grep 'root' /var/log/secure

1.2利用[]来搜索集合字符

eg: grep 't[ae]st' filename 搜索test或tast这两个单词的行

eg: grep '[^g]oo' filename 搜索oo前面不是g的单词的行

eg: grep '[^a-z]oo' filename 搜索oo前面不是英文小写的单词的行

1.3行首与行尾字符 ^ $

eg: grep '^[a-z]' filename 搜索行首为小写英文的单词的行

eg: grep '^[^a-z]' filename 搜索行首不是小写英文的单词

eg: grep 'a$' filename 搜索行尾为a的行

eg: grep '^$' filename 搜索文件中的空白行

1.4任意一个字符(.)与重复字符(*)

eg: grep 'g..d' filename 搜索以g开头,d结尾4个单词的行

eg: grep 'ooo*' filename 搜索至少两个o以上的字符串的行

1.5限定连续重复字符范围{}

eg: grep 'o\{2\}' filename 搜索包含2个o的行

注意:{}需要用到转义符(\)

2.sed工具

格式: sed [-nefr] [动作]

-n :使用安静模式

-e :直接在命令行模式上进行sed的操作

-f :直接将sed的操作写在一个文件内,-f filename则可以执行filename内的sed操作。

-r :sed的操作支持的是扩展正则表达式的语法

操作说明: [n1[,n2]]function

n1,n2 :不一定存在,一般代表“选择进行操作的行数”。

function操作有:

a :新增,a的后面可以接字符串,而这些字符串会在新的一行出现(当前的下一行)

c :替换 ,c的后面可以接字符串,

d : 删除,后面通常不接字符串

i :插入,i的后面可以接字符串,而这些字符串会在新的一行出现(当前的上一行)

p :打印,通常与参数-n一起运行

s : 搜索,还可以替换,例如: 1,20s/old/new/g

2.1

eg: nl /etc/passwd | sed '2,5d'

显示/etc/passwd的内容,并且需要打印行号,同时请将第2-5行删除

eg: nl /etc/passwd | sed '3,$d'

显示/etc/passwd的内容,并且需要打印行号,同时请将第3到最后一行删除

eg: nl /etc/passwd | sed '2a drink tea'

在第二行后加上“drink tea”字样

eg:nl /etc/passwd | sed '2,5c No 2-5 number'

将2-5行的内容替换成“No 2-5 number”。

eg: nl /etc/passwd | sed -n '5,7p'

仅显示5-7行

eg:ifconfig eth0 | grep 'inet ' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'

只显示ip地址,不显示其他东西

3.awk工具

与sed常常用作于整行处理相比,awk比较倾向于一行中分成数个“字段”来处理。

格式: awk '条件类型1{动作1} 条件类型2{动作2} ...' filename

awk的内置变量:

NF:每一行拥有的字段总数

NR:当前awk所处理的是“第几行”数据

FS:当前的分隔符,默认空格键

3.1

eg: last | awk '{print $1 "\t" $3}'

取出每一行的第一栏和第三栏。(其中$0表示整行)

3.2

eg: last | awk '{print $1 "\t lines: " NR "\t columes: " NF}'

列出每行的第一栏,并显示行号和字段总数(即栏数)

3.3

eg: cat /etc/passwd | awk '{FS=":"} $3<10{print $1 "\t" $3}'

分隔符用“:”,列出第一栏和第三栏并且第三栏的数据要大于10.

eg:cat /etc/passwd | awk 'BEGIN {FS=":"}{print $1}' 查看存在的用户

cat /etc/passwd | sed 's/:.*$//g'

3.4

eg:有一个文件pay.txt。内容如下:

Name 1st 2nd 3th

xb 2300 3400 3450

bobo 5400 4300 2300

......

想计算出每个人的总额,并格式化输出。输出结果如下:

Name 1st 2nd 3th total

xb 2300 3400 3450 9150

bobo 5400 4300 2300 12000

......

命令为: cat pay.txt | awk 'NR==1{printf “%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"total"} NR>=2{total=$2+$3+$4 printf "%10s %10d %10d %10d %10d\n",$1,$2,$3,$4,total}'

4.文件比较

4.1 diff (行为单位比较)

格式:diff [-bBi] from-file to-file

参数:

-b :忽略一行中有多个空白的差异(例如:“about me"与”about me")视为相同

-B : 忽略空白行的不同

-i :忽略大小写的不同

eg:diff /tmp/test/passwd /etc/passwd

文件的比较

eg: diff /etc /tmp/test

目录的比较
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: