Chinaunix首页 | 论坛 | 博客
  • 博客访问: 715180
  • 博文数量: 147
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 1725
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-22 10:36
文章分类

全部博文(147)

文章存档

2011年(1)

2010年(1)

2009年(35)

2008年(110)

我的朋友

分类: LINUX

2008-10-19 17:54:11

一.基础正则表达式
  grep:分析一行信息,若其中有我们想要的信息,就将该行取出来
     grep [-acinv] '搜索字符串' filename
     -a:将二进制文件以文本文件的方式搜索数据
     -c:计算找到搜索字符串的次数
     -i:忽略大小写
     -n:顺便输出行号
     -v:反向选择,即显示出没有'搜索字符串'内容的那一行
     例子:last | grep 'root'
     例子:last | grep -v 'root'
     last | grep 'root'| cut -d ' ' -f 1


例1.搜索特定字符串
    从文件中取得'the'字符串
    grep -n 'the' filename
   当该行没有'the'就取出来
   grep -nv 'the' filename
例2.利用[]搜索集合字符
   []中不论有几个字符都代表有一个字符
   grep -n 'te[ae]st' filename
   [^]是[]的反向选择
   grep -n '[^g]oo' filename
例3.行首^和行尾$字符
    查询以'the'开头的行
    grep -n '^the' filename
    查询以小写字母开头
    grep -n '^[a-z]' filename
    查询非字母开头的
    grep -n '^[^a-zA-Z]' filename
    找出空行
    grep -n '^$' filename
    略去空行和注释行
   grep -v '^$' filename | grep -v '^#'
例4.任意一个字符.和重复字符*
   grep -n 'g..d' filename  :查找共有四个字符串,开始是g结束是d
  grep -n '000*' filename   :至少俩个00字符串
  grep -n 'g00*g' filename  :开头和结尾都是g,中间有一个以上o
  grep -n 'g.*g'  filename  :开头和结尾都是g,中间可有可无
  找出任意数字的行 grep -n '[0-9][0-9]*' filename
例5.限定连续重复字符范围
  grep -n '0\{2\}' filename   :找到两个0的字符串
  grep -n 'go\{2,5\}g'  filename    :找到g后面有2~5个o,然后在接个g的字符串
grep -n 'go\{2,\}g' filename         :找到两个以上的
二.扩展正则表达式
 上面的一个例子可以这样:egrep -v '^$|^#' filename找出不是空白行和注释行
+:重复一个或者一个以上
?:0个或者1个
|:用或的方式找出字符串
():找出用户组字符串grep -n 'g(la|oo)d' filename
   意思是搜索glad或者是good字符串
格式化显示:
  printf '打印格式' 内容
\a:警告声音输出
\b:退格键
\f:清楚屏幕
\n:输出新的一行
\r:enter键
\t:水平的tab键
\v:垂直的tab键
\xNN:NN为两位数字,可以转化数字成为字符
%ns:n是数字,s是字符
%ni:即多少个整数数字
%N.nf:n与N都是数字,f表示浮点,有小数位数,假设要10位,小数点有两位即为%10.2f
数字45代表的是什么?
printf '\x45\n'
sed工具:
sed [-nefr] [动作]
 参数:
 -n :一般的sed用法中,所有的输入都会显示在屏幕上,,如果加上-n,则只有经过sed特殊处理的那一行才会列出来
 -e:直接在命令行模式进行sed编辑
 -f:直接将sed操作写在一个文件内,-f filename则可以执行filename内的sed操作
 -r;sed的操作支持的扩展表达式的语法 ,默认的是基础正则表达式
操作说明:[n1,[n2]]funcation
 a:新增,当前的下一行
 s:替换
 d:删除
i:插入当前的上一行
p:打印,通常和sed -n
s:搜索
例子:将2~5行删除:cat /etc/passwd | sed '2,5d'
在第二行后加上'drink tea'  ;sed '2a drink tea'
在第二行后面加上两行字'drink tea or....'  'drink tea?'
  [wuxiaoxiao@localhost linux]$ nl lean | sed '10a 1111111...\(按enter键)
> drink ?'
将第一行和第五行替换为"no 2-5 number"
sed '2,5c no 2-5 number'
仅显示第5-7行
sed -n '5,7p'
awk工具简介
awk '条件类型1{动作1} 条件类型2{动作2} ....' filename
last | awk '{print $1 "\t" $3}'
awk内置变量
NF 每一行($0)拥有的字段总数
NR 当前awk所处里的是第几行数据
FS 当前的分割符,默认的是空格键
last | awk '{print $1 "\t lines: " NR "\t columes: "NF}'
awk的逻辑运算
> < >= <= == !=
例子:/etc/passwd中是以冒号(:)来分割字段的,假设药查看第三栏小于10以下的数据,并且列出账号和第三栏 
[wuxiaoxiao@localhost linux]$ cat /etc/passwd | awk '{FS=":"} $3<10 {print $1 "\t" $3}'
root:x:0:0:root:/root:/bin/bash
bin     1
daemon  2
adm     3
lp      4
sync    5
shutdown        6
halt    7
mail    8
news    9
第一行没有变化
[wuxiaoxiao@localhost linux]$ cat /etc/passwd | awk 'BEGIN{FS=":"} $3<10 {print $1 "\t" $3}'
root    0
bin     1
daemon  2
adm     3
lp      4
sync    5
shutdown        6
halt    7
mail    8
news    9

阅读(988) | 评论(0) | 转发(0) |
0

上一篇:vim的使用

下一篇:shell脚本

给主人留下些什么吧!~~