Chinaunix首页 | 论坛 | 博客
  • 博客访问: 439833
  • 博文数量: 112
  • 博客积分: 4451
  • 博客等级: 上校
  • 技术积分: 1063
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-23 10:19
个人简介

更多精品http://shop65927331.taobao.com

文章分类

全部博文(112)

文章存档

2011年(19)

2010年(54)

2009年(39)

分类: LINUX

2009-05-23 19:09:45

7章 正则表达式介绍
本章内容包括:
匹配行首与行尾。
匹配数据集。
只匹配字母和数字。
匹配一定范围内的字符串集。
正则表达式是一些特殊或不很特殊的字符串模式的集合。
基本元字符集及其含义:
^              
只只匹配行首

$              
只只匹配行尾
*              
只一个单字符后紧跟 * ,匹配 0个或多个此单字符
[]             
只匹配 [ ] 内字符。可以是一个单字符,也可以是字符序列。可以使用-表示 [] 内字符序列范围,
               
如用 [1-5] 代替 [12345]
\              
只用来屏蔽一个元字符的特殊含义。因为有时在shell中一些元字符有特殊含义。 \可以使其失去应有意义

.              
只匹配任意单字符
pattern\{n\}   
只用来匹配前面 pattern 出现次数。 n 为次数
pattern\{n,\}  
只含义同上,但次数最少为 n
pattern\{n
m\} 只含义同上,但 pattern 出现次数在 n m之间


句点“ .”可以匹配任意单字符。
^
只允许在一行的开始匹配字符或单词。注意 ^符号的使用,当直接用在第一个括号里,意指否定或不匹配括号里内容。
$
^正相反,它在行尾匹配字符串或字符, $符号放在匹配单词后。EX:trouble$
使用*匹配字符串中的单字符或其重复序列:compu*t将匹配字符 u 一次或多次

使用\屏蔽一个特殊字符的含义.
使用 []匹配特定字符串或字符串集,可以用逗号将括弧内要匹配的不同字符串分开,但并不强制要求这样做.  使用“ - ”表示一个字符串范围,表明字符串范围从“ -”左边字符开始,到“ - ”右边字符结束。注意 ^符号的使用,当直接用在第一个括号里,意指否定或不匹配括号里内容。



8 grep 家 族
• grep
(参数)选项。
匹配 grep的一般模式。
只匹配字母或数字,或两者混用。
匹配字符串范围。
grep
一般格式为:grep [ 选项 ]基本正则表达式 [文件 ]
grep命令中输入字符串参数时,最好将其用双引号括起来。在调用变量时,也应该使用双引号,诸如:grep“$MYVAR”文件名,在调用模式匹配时,应使用单引号。

常用的 grep选项有:
-c
只输出匹配行的计数。
-i
不区分大小写(只适用于单字符)。
-h
查询多文件时不显示文件名。
-l
查询多文件时只输出包含匹配字符的文件名。
-n
显示匹配行及行号。
-s
不显示不存在或无匹配文本的错误信息。
-v
显示不包含匹配文本的所有行。

使用 grep抽取精确匹配的一种更有效方式是在抽取字符串后加 \> :grep '48\>' filename
grep
和正则表达式
:
使用正则表达式使模式匹配加入一些规则,因此可以在抽取信息中加入更多选择。使用正则表达式时最好用单引号括起来,这样可以防止 grep中使用的专有模式与一些 shell命令的特殊方式相混淆。

使用grep匹配或者模式:
grep
命令加 - E 参数,这一扩展允许使用扩展模式匹配。例如,要抽取城市代码为 219216,方法如
:grep -E '219|216' filename
查询有特殊含义的字符,诸如$.'"*[]^|\+?,必须在特定字符前加\。假设要查询包含“*”的所有行,脚本如
:grep '\*' filename


9 AWK 介 绍

a w k
语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息。
抽取域。
匹配正则表达式。
比较域。
awk传递参数。
基本的 awk行操作和脚本

有三种方式调用 awk,第一种是命令行方式:awk [-F dield-separator] 'command' input-file
[ - F
域分隔符 ]是可选的,因为awk使用空格作为缺省的域分隔符

第二种方法是将所有 a w k 命令插入一个文件,并使 a w k 程序可执行,然后用 a w k 命令解释器作为脚本的首行,以便通过键入脚本名称来调用它。
第三种方式是将所有的 awk命令插入一个单独文件.
任何 a w k语句都由模式和动作组成。在一个 a w k 脚本中可能有许多语句。模式部分决定动作语句何时触发及触发事件。模式可以是任何条件语句或复合语句或正则表达式。模式包括两个特殊字段 BEGINEND.BEGIN语句使用在任何文本浏览动作之前,之后文本浏览动作依据输入文件开始执行。 END语句用来在awk完成文本浏览动作后打印输出文本总数和结尾状态标志。

实际动作在大括号 {}内指明。awk执行时,其浏览域标记为$1$2...$n。这种方法称为域标识.
保存 awk输出:1.最简单的方式是使用输出重定向符号 > 文件名;2.是使用 t e e命令,在输出到文件的同时输出到屏幕。

awk '{print $0}' file.txt > output.file
awk '{print $0}' file.txt | tee output.file

awk
中正则表达式及其操作:
这里正则表达式用斜线括起来。使用/Green/可以查出单词Green的出现情况。

1.
匹配
为使一域号匹配正则表达式,使用符号后紧跟正则表达式.表达式 {if($4~/brown/) print } 意即如果field-4包含brown,打印它.
2.
精确匹配
==
$3==“48”
3.
不匹配

~ 相反的符号是 !~ ,意即不匹配
4.
小于 <
5.
小于等于
<=
6.
大于
>
7.
设置大小写
‘/[Gg]reen/’
8.
任意字符: 表达式 /^...a/意为行首前三个字符任意,第四个是a,尖角符号代表行首

9.
或关系匹配: 为抽取级别为 yellow brown的记录,使用竖线符 |。意为匹配 | 两边模式之一。注意,使用竖线符时,语句必须用圆括号括起来。
10.
行首 ^
11. && AND :
语句两边必须同时匹配为真。

12. || OR
:语句两边同时或其中一边匹配为真。awk '{if ($4=="yellow" || $4~/brown/) print $0}' file.txt

awk
操作符:awk中使用操作符,基本表达式可以划分为数字型、字符串型、变量型、域及数组元素

= += *= / = %= ^ = 
赋值操作符           
                  条件表达操作符

|| && !            
并、与、非           
~ !~               
匹配操作符,包括匹配和不匹配

< <= == != >>      
关系操作符
+-*/%^             
算术操作符
++ --              
前缀和后缀

内置的字符串函数:
gsub(r,s)               
在整个 $0中用 s 替代
r
gsub(r,s,t)             
在整个 t中用 s 替代
r
index(s,t)              
返回 s 中字符串 t 的第一位置

length(s)               
返回 s长度
match(s,r)              
测试 s 是否包含匹配 r的字符串
split(s,a,fs)           
fs 上将 s 分成序列 a
sprint(fmt,exp)         
返回经 fmt 格式化后的
exp
sub(r,s)                
$0 中最左边最长的子串代替
s
substr(s,p)             
返回字符串 s 中从 p 开始的后缀部分

substr(s,p,n)           
返回字符串 s 中从 p 开始长度为 n 的后缀部分


10 sed 用 法 介 绍
sed
是一个非交互性文本流编辑器。本章内容有:
抽取域。
匹配正则表达式。
比较域。
增加、附加、替换。
基本的 sed命令和一行脚本。
使用 sed需要记住的一个重要事实是,无论命令是什么, sed 并不与初始化文件打交道,它操作的只是一个拷贝,然后所有的改动如果没有重定向到一个文件,将输出到屏幕。
调用sed:
调用 sed有三种方式:在命令行键入命令;将 sed命令插入脚本文件,然后调用sed;将sed命令插入脚本文件,并使sed脚本可执行。

使用 sed命令行格式为:sed [ 选项] sed 命令 输入文件
记住在命令行使用 sed命令时,实际命令要加单引号。 sed也允许加双引号。
使用 sed脚本文件,格式为:sed [ 选项]  -f sed脚本文件 输入文件
要使用第一行具有 sed命令解释器的 sed脚本文件,其格式为:sed脚本文件 [选项 ] 输入文件
保存sed输出:sed 'commaand' inputfile > outputfile

使用sed在文件中查询文本的方式
:
1)
使用行号,可以是一个简单数字,或是一个行号范围。

2)
使用正则表达式
x                    x
为一行号,如 1
x,y                 
表示行号范围从 x y,如 2 5表示从第 2行到第 5

/pattern/           
查询包含模式的行。例如 /disk/ /[a-z]/
/pattern/pattern/   
查询包含两个模式的行。例如
/disk/disks/
pattern/,x          
在给定行号上查询包含模式的行。如
/ribbon/,3
x,/pattern/         
通过行号和模式查询匹配行。
3./vdu/
x,y!                
查询不包含指定行号 x y 的行。
1,2!

基本sed编辑命令
:
p   
打印匹配行

=   
显示文件行号
a\  
在定位行号后附加新文本信息
i\  
在定位行号后插入新文本信息
d   
删除定位行
c\  
用新文本替换定位文本
s   
使用替换模式替换相应模式
r   
从另一个文件中读文本
w   
写文本到一个文件
q   
第一个模式匹配完成后推出或立即推出
l   
显示与八进制 ASCII 代码等价的控制字符
{}  
在定位行执行的命令组
n   
从另一个文件中读文本下一行,并附加在下一行
g   
将模式 2粘贴到 /pattern n/
y   
传送字符

n   
延续到下一输入行;允许跨行的模式匹配语句

基本sed编程举例:
1.
使用print)显示行
:
sed -n '1,4p' filename    ##print line 1-4
sed -n '/word/'p filename ##print lines matched 'word'
2.
删除路径名第一个 \符号

echo $PWD | sed 's/^\///g'
3.
删除首字符
echo "accounts.doc" | sed 's/^.//g'
4.
增加文件扩展名
echo "account" | sed 's/$/.doc/g'
5.
替换字符系列:+ to of ;% to located
echo $name | sed 's/\+/ of /g' | sed 's/\%/ located /g'



11章 合并与分割

本章内容有:
实用的分类( sort)操作。
• uniq

• join

• cut

• paste

• split


sort
用法:sort命令将许多不同的域按不同的列顺序分类。
sort
命令的一般格式为:
sort -cmu -o output_file [other options] +pos1 +pos2 input_files
下面简要介绍一下 sort的参数:
-c
测试文件是否已经分类。
-m
合并两个分类文件。
-u
删除所有复制行。
-o
存储 sort结果的输出文件名。
其他选项有:
-b
使用域进行分类时,忽略第一个空格。
-n
指定分类是域上的数字分类。
-t
域分隔符;用非空格或 tab键分隔域。
-r
对分类次序或比较求逆。
+n n
为域号。使用此域号开始分类。


uniq
用法:
uniq
用来从一个文本文件中去除或禁止重复行。

命令一般格式:uniq -u d c -f input-file output-file
其选项含义:

-u
只显示不重复行。
-d
只显示有重复数据行,每种重复行只显示其中一行
-c
打印每一重复行出现次数。
-f n
为数字,前 n个域被忽略。
一些系统不识别 -f选项,这时替代使用 -n

join
用法;
join
用来将来自两个分类文本文件的行连在一起。

join [option] file1 file2

cut
用法:
cut
用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。

  cut
一般格式为:
  cut [options] file1 file2
 
下面介绍其可用选项:
  -c list
指定剪切字符数。
  -f field
指定剪切域数。
  -d
指定与空格和 tab键不同的域分隔符。
  -c
用来指定剪切范围,如下所示:
  -c1
5-7 剪切第 1个字符,然后是第 5到第 7个字符。
  -c1-50
剪切前 50个字符。
  -f
格式与 -c相同。
  -f 1
5 剪切第1域,第 5域。
  -f1
10-12 剪切第 1域,第 10域到第 12域。
example:
要从文件 /etc/passwd中剪切注册名及缺省根目录,需抽取域 1和域 3
cut -d: -f1,3 /etc/passwd

paste
用法:
cut
用来从文本文件或标准输出中抽取数据列或者域,然后再用paste可以将这些数据粘贴起来形成相关文件。

paste
格式为;
paste -d -s -file1 file2
选项含义如下:
-d
指定不同于空格或 tab键的域分隔符。例如用 @分隔域,使用 -d@
-s
将每个文件合并成行而不是按行粘贴。
-
使用标准输入。

split
用法:
split
用来将大文件分割成小文件。

split
命令一般格式:
split -output_file-size input-filename output-filename
这里output-file-size指的是文本文件被分割的行数.plit查看文件时,output-file-size选项指定将文件按每个最多 1000行分割。

12 tr 用 法
tr
用来从标准输入中通过替换或删除操作进行字符转换。tr主要用于删除文件中控制字符或进行字符转换。使用 tr 时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。
大小写转换。
去除控制字符。
删除空行。
带有最常用选项的 tr命令格式为:
tr -c -d -s  string_from string_to < input-filename > output-filenamne
-c
用字符串 1中字符集的补集替换此字符集,要求字符集为 ASCII
-d
删除字符串 1中所有输入字符。
-s
删 除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
Input-file
是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。

字符范围:
[a-z]       a-z
内的字符组成的字符串。

[A-Z]       A-Z
内的字符组成的字符串。
[0-9]       
数字串。
/octal     
一个三位的八进制数,对应有效的 ASCII 字符。
[O*n]      
表示字符 O重复出现指定次数 n。因此 [O*2] 匹配 OO的字符串。
当用一个单字符替换一个字符串或字符范围时,注意字符并不放在方括号里( [ ])。一些系统也可以使用方括号,例如可以写成 [“ \ 0 1 2”]“ \012” ,tr也允许不加引号,因此命令中,看到单引号而不是双引号时也不要感到奇怪。像大多数系统工具一样, tr 也受特定字符的影响。因此如果要匹配这些字符,需使用反斜线屏蔽其特殊含义。例如,用 \{指定花括号左边可以屏蔽其特殊含义




 

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