Chinaunix首页 | 论坛 | 博客
  • 博客访问: 363288
  • 博文数量: 112
  • 博客积分: 5245
  • 博客等级: 大校
  • 技术积分: 1120
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-07 09:20
个人简介

静下来,定好方向,好好干。

文章分类
文章存档

2017年(1)

2012年(1)

2011年(5)

2010年(6)

2009年(16)

2008年(59)

2007年(24)

我的朋友

分类: LINUX

2007-11-08 13:13:58



正则表达式是一种模糊匹配和替换的工具.

ab aabb aaabbb这种规律无法用正则表达式匹配
c语言命名规则,用'^[A-Za-z_][A-Za-z0-9]*$'匹配
'\( o \| c \) d' 匹配od  cd

字符类:
.                匹配任何单个字符,除换行符
[]              匹配[]内的任意字符
[[:xxx:]]     扩展字符类

数量限定类:    表示前面所修饰的项目(字符,字符类,小括号括起 \( \) 的单元 )的数量:
\?   匹配0次或1次
\+   匹配一次或多次
*    匹配0次或多次
\{N\}   匹配N次
\{N, \}   匹配N次或更多
\{N, M\}   匹配N次-M次


位置限定类:  表示特殊的位置
$         行末
^        行首
\<       单词开头
\>       单词结尾


转义字符backslash:    将普通字符转成特殊操作符,或将特殊操作符转成普通字符,如\.  \*  \\

其他操作符:   \( \) \|   对表达式起作用,而不是对目标串,如:\(ab\)\{9\}匹配连续出现9次ab的串


grep egrep增强型,很多字符不需要\转义了.

$egrep '[a-z]{9}' a.txt       查找具有连续9个小写字母的行
$grep '!$' a.txt                  查找以!结尾的行


sed 'script' files      其中,files是一个或多个待处理的文件名; script是一段sed脚本, 由一条或多条sed命令组成, 每条命令的基本格式为 /pattern/ action, pattern是正则表达式, action如下:
 action 功能 
 p p打印当前行
 d d删除当前行
 s/pattern1/pattern2/ s查找第一个匹配p1的串,替换为p2
 /pattern/s/pattern1/pattern2/ s查找符合p的行,将该行第一个匹配p1的串替换为p2
 s/pattern1/pattern2/g s查找匹配p1的串,全部替换为p2

sed缺省是把待处理文件的内容与处理结果一同输出.只想输出处理结果,加-n选项;
如:$ sed -n '/abc/p' testfile      $ sed 's/b/-&-/' testfile  把abc变成a-b-c (&表示匹配p1的字串)
    $sed 's/\(a\)\(b\)/-\1-~\2~/' testfile   \1表示第一个()匹配的内容,\2表示第二个()匹配的内容

sed能以行为单位对文件进行流处理,而awk除了以行为单位处理,还能以列为单位对文件进行处理;
awk 'script' files, 其中命令的基本格式是: /pattern/ {action} 
$ awk '{print $2;}' testfile         自动变量$1,$2...分别表示第一列,第二列等,$0表示整行;
$ awk '$2<75 {printf "%s\t%s\n", $0, "LOW";} $2>=75 {print $0;}' testfile 可进行条件判断
$ awk '/^ *$/ { x=x+1;} END {print x;}' test         统计空行的数目,可以用变量.
普通的pattern每行都执行一次,BEGIN 和 END 只是开头和结尾的时候执行一次;
awk的内建变量:
FILENAME       当前输入文件的文件名,只读
NR                    当前的行号,只读,record
NF                    当前行拥有的列数,只读,field
OFS                   输出格式的列分割符,缺省空格
FS                     输入文件的列分割符,缺省空格和TAB
ORS                   输出格式的行分割符,缺省换行符
RS                     输入文件的行分割符,缺省换行符

删除第10列,文件有100列
cut -d " " -f 1-9,11-100 file
awk '{$10="",print}' file


 

阅读(793) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~