11月5日
linux学习--sed,sort,uniq,join,cut,paste,split
==============================sed==========================
1、调用sed
调用s e d有三种方式:在命令行键入命令;将s e d命令插入脚本文件,然后调用s e d;将s e d
命令插入脚本文件,并使s e d脚本可执行。
使用s e d命令行格式为:
sed [选项] s e d命令 输入文件。
记住在命令行使用s e d命令时,实际命令要加单引号。s e d也允许加双引号
使用s e d脚本文件,格式为:
sed [选项] -f sed脚本文件输入文件
要使用第一行具有s e d命令解释器的s e d脚本文件,其格式为
sed脚本文件 [选项] 输入文件
sed选项如下:
n 不打印;s e d不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。p命令可以
用来打印编辑行。
c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条s e d命令,
此选项无用,但指定它也没有关系。
f 如果正在调用s e d脚本文件,使用此选项。此选项通知s e d一个脚本文件支持所有的s e d
命令,例如:sed -f myscript.sed input_file,这里m y s c r i p t . s e d即为支持s e d命令的文件。
2、使用sed在文件中查询文本的方式
s e d浏览输入文件时,缺省从第一行开始,有两种方式定位文本:
1) 使用行号,可以是一个简单数字,或是一个行号范围。
2) 使用正则表达式
使用s e d在文件中定位文本的方式
x x为一行号,如1
x , y 表示行号范围从x到y,如2,5表示从第2行到第5行
/ p a t t e r n / 查询包含模式的行。例如/ d i s k /或/[a-z]/
/ p a t t e r n / p a t t e r n / 查询包含两个模式的行。例如/ d i s k / d i s k s /
p a t t e r n / , x 在给定行号上查询包含模式的行。如/ r i b b o n / , 3
x , / p a t t e r n / 通过行号和模式查询匹配行。3 . / v d u /
x , y ! 查询不包含指定行号x和y的行。1 , 2 !
3、基本sed编辑命令
sed编辑命令
p 打印匹配行
= 显示文件行号
a \ 在定位行号后附加新文本信息
i \ 在定位行号后插入新文本信息
d 删除定位行
c \ 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文件中读文本
w 写文本到一个文件
q 第一个模式匹配完成后推出或立即推出
l 显示与八进制A S C I I代码等价的控制字符
{ } 在定位行执行的命令组
n 从另一个文件中读文本下一行,并附加在下一行
g 将模式2粘贴到/pattern n/
y 传送字符
n 延续到下一输入行;允许跨行的
4、sed和正则表达式
sed识别任何基本正则表达式和模式及其行匹配规则
5、基本sed编程举例
使用p(rint)显示行:
p r i n t命令格式为[ a d d r e s s [,a d d r e s s ] P。显示文本行必须提供s e d命令行号。
sed -n '2p' quote.txt
显示从2到4行
sed -n '2,4p' url_access_detail.txt
打印模式:
sed -n '/1028f/p' url_access_detail.txt
sed -n '/\/\?1028f/p' url_access_detail.txt
使用模式和行号进行查询:
只在第4行查询
sed -n '4,/\/\?1028f/'p url_access_detail.txt
显示整个文件:
只需将行范围设为第一行到最后一行1 , $。$意为最后一行:
sed -n '1,$p' quote.txt
任意字符:
匹配任意字母,后跟任意字母的0次或多次重复,并以i n g结尾,模式为/ . * i n g /。可以使用
这个模式查询以i n g结尾的任意单词
sed -n '/.*ing/'p quote.txt
打印行号:
要打印行号,使用等号=。打印模式匹配的行号,使用格式/pattern/=。
sed -e '/music/=' quote.txt
(不过这些好像在linux里面不支持)
附加文本:
sed -n '/1028f/'p url_access_detail.txt |sed '/h/ a\then haha'
在前面添加,用i\
替换,用c\
删除,用d\
6、替换文本
替换命令用替换模式替换指定模式,格式为:
[ a d d r e s s [,address]] s/ pattern-to-find /replacement-pattern/[g p w n]
s选项通知s e d这是一个替换操作,并查询p a t t e r n - t o - f i n d,成功后用r e p l a c e m e n t - p a t t e r n替
换它。
g 缺省情况下只替换第一次出现模式,使用g选项替换全局所有出现模式。
p 缺省s e d将所有被替换行写入标准输出,加p选项将使- n选项无效。- n选项不打印输出
结果。
w 文件名使用此选项将输出定向到一个文件。
sed 's/haha/hehe/g w a.out' quote.txt
使用替换修改字符串:
如果要附加或修改一个字符串,可以使用( &)命令,&命令保存发现模式以便重新调用
它,然后把它放在替换字符串里面。这里给出一个修改的设计思路。先给出一个被替换模式,
然后是一个准备附加在第一个模式后的另一个模式,并且后面带有&,这样修改模式将放在
匹配模式之前。例如, s e d语句s/nurse/"Hello"&/p 的结果如下
sed 's/nurse/"Hello" &/p' quote.txt
比如原来的句子为: The nurse come from china.
替换后的句子为: The "Hello" nurse come from china.
7、从文件中读文本
处理文件时, s e d允许从另一个文件中读文本,并将其文本附加在当前文件。此命令放在
模式匹配行后,格式为:address r filename
sed '/companty/r append.txt' quote.txt
8、显示文件中的控制字符
s e d格式为:
[ a d d r e s s,[ a d d r e s s ] ] l
sed '1,$1' quote.txt
(linux 不支持)
9、处理报文输出
比如有如下输出:
Database Size DateCreated
----------------------------
newlog 2289 12/11/2005
mysql 1909 09/12/2005
使用k做分类键排序:
可以指定分类键次序。先以第4域,再以第1域分类,命令为-k4 -k1
sort -t: -k4 -k1 video.txt
9、指定sort序列
可以指定分类键顺序,也可以使用- n选项指定不使用哪个分类键进行查询。看下面的sort命令:
sort +0 -2 +3
该命令意即开始以域0分类,忽略域2,然后再使用域3分类。
10、pos用法
指定开始分类的域位置的另一种方法是使用如下格式:
sort +filed.characterin
意即从filed开始分类,但是要在此域的第characterin个字符开始。
11、使用head和tail将输出分类
可以使用h e a d或t a i l查阅任何大的文本文件
head -200 filename
12、awk使用sort输出结果
13、将两个分类文件合并
将文件合并前,它们必须已被分类.
使用-m +0。将这个文件并入已存在的分类文件v i d e o . s o r t,要以名称域进行分类,实际上没有必要加入+ o,但为了保险起见,还是加上的好。
sort -t: -m +0 video2.txt video.sort
===================uniq用法====================
uniq用来从一个文本文件中去除或禁止重复行。一般u n i q假定文件已分类,并且结果正确。
sort的唯一性选项去除所有重复行,而uniq命令并不这样做。重复行是什么?在uniq里意即持续不断重复出现的行,中间不夹杂任何其他文本.
命令一般格式:
uniq -u d c -f inputfile outputfile
其选项含义:
-u 只显示不重复行。
-d 只显示有重复数据行,每种重复行只显示其中一行
-c 打印每一重复行出现次数。
-f n为数字,前n个域被忽略。
一些系统不识别- f选项,这时替代使用- n。
对特定域进行测试:
使用- n只测试一行一部分的唯一性。例如- 5意即测试第5域后各域唯一性。域从1开始记数。
如果忽略第1域,只测试第2域唯一性,使用- n 2,下述文件包含一组数据,其中第2域代表组代码。
uniq -f2 parts.txt或
uniq -n2 parts.txt
==================join用法(强大呀,像sql里面的join 呢)========================
join用来将来自两个分类文本文件的行连在一起。
下面讲述join工作方式。这里有两个文件f i l e 1和f i l e 2,当然已经分类。每个文件里都有一
些元素与另一个文件相关。由于这种关系, join将两个文件连在一起,这有点像修改一个主文
件,使之包含两个文件里的共同元素。
为有效使用join,需分别将输入文件分类:
join的格式:
join [option] file1,file2
an n 为一数字,用于连接时从文件n中显示不匹配行。例如, -a1显示第一个文件的不匹
配行,- a2为从第二个文件中显示不匹配行。
o n.m n为文件号,m为域号。1.3表示只显示文件1第三域,每个n,m必须用逗号分隔,
如1.3,2.1。
j n m n为文件号,m为域号。使用其他域做连接域
t 域分隔符。用来设置非空格或t a b键的域分隔符。例如,指定冒号做域分隔符- t:
split -output_file-size input-filename output-filename
每个文件格式为x [ a a ]到x [ z z ],x为文件名首字母, [ a a ]、[ z z ]为文件名剩余部分顺序字符组合.
split -5000 url_access_user.txt splitfile