注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

云之南

风声,雨声,读书声,声声入耳;家事,国事,天下事,事事关心

 
 
 

日志

 
 
关于我

专业背景:计算机科学 研究方向与兴趣: JavaEE-Web软件开发, 生物信息学, 数据挖掘与机器学习, 智能信息系统 目前工作: 基因组, 转录组, NGS高通量数据分析, 生物数据挖掘, 植物系统发育和比较进化基因组学

网易考拉推荐

二、cut paste sed grep uniq sort的用法  

2010-03-14 19:40:34|  分类: linux&shell |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
http://blog.chinaunix.net/u3/90136/showart_1795318.html
二、cut paste sed grep的用法



1 cut

cut是从数据文件或命令的输出中析取各种各样的数据域。
1) cut -cchars file

de>[pvg@server ~]$ who
root :0 Dec 17 13:32
root pts/1 Dec 17 13:33 (:0.0)
pvg pts/2 Dec 23 15:19 (192.168.18.150)
[pvg@server ~]$ who | cut -c1-4
root
root
pvg
de>

/*析取第1个到第4个字符*/

de>[pvg@server ~]$ who | cut -c1-4,18-
root Dec 17 13:32
root Dec 17 13:33 (:0.0)
pvg Dec 23 15:19 (192.168.18.150)
de>

/*析取第1个到第4个字符和 第18个后的所有的字符*/

2)cut -ddchar -ffields file
其中:dchar是分隔符(默认的字段是制表符),fields是析取的字段

de>[pvg@server ~]$ cut -d: -f1,7 /etc/passwd
root:/bin/bash
bin:/sbin/nologin
...
de>

/*分隔符是:,析取第1个和7个字段*/

2 paste

paste刚好与cut相反,把多行和在一起。
1)paste -ddchar file
其中:dchar是分隔符(默认的字段是制表符)

de>[pvg@server ~]$ cat name
Tony
Lucy
Fred
[pvg@server ~]$ cat number
(100) 100-100
(101) 400-402
(102) 500-302
[pvg@server ~]$ paste -d':' name number | cat
Tony:(100) 100-100
Lucy:(101) 400-402
Fred:(102) 500-302
de>

2) paste -ddchar -s file
同一文件的行粘帖在一起

de>[pvg@server ~]$ paste -s name | cat
Tony Lucy Fred
de>

3 sed

sed是一个非交互性的文本编辑器。它编辑文件或标准输入导出的文件拷贝。所以,它不与初始的文件打交道,所有的改动输出到屏幕或重定向到文件。
格式为:
sed [options] '{command}' [filename]
1) 修改
A 替换 's/{old value}/{new value}/' 

de>[pvg@server ~]$ echo The tiger cubs will meet on Tuesday after school | sed 's/tiger/wolf/'
The wolf cubs will meet on Tuesday after school
de>

B 多次修改
a)第一种是使用 "-e" 选项,它通知程序使用了多条编辑命令。

de>[pvg@server ~]$ echo The tiger cubs will meet on Tuesday after school | sed -e 's/tiger/wolf/' -e's/after/before/'
The wolf cubs will meet on Tuesday before school
de>

b)分号来分隔命令。注意分号必须是紧跟斜线之后的下一个字符。如果两者之间有一个空格,操作将不能成功完成。 

de>[pvg@server ~]$ echo The tiger cubs will meet on Tuesday after school | sed 's/tiger/wolf/; s/after/before/'
The wolf cubs will meet on Tuesday before school
de>


C 全局修改
sed 编辑器在找到一个要修改的项目并作了修改之后继续处理下一行,而不读整行。

de>[pvg@server ~]$ cat test
1 line line1
2 line line2
3 line line3
4 line line4
[pvg@server ~]$ cat test | sed 's/line/LINE/'
1 LINE line1
2 LINE line2
3 LINE line3
4 LINE line4
de>

这意味着它们都处理每一行中出现的第一个选定序列。为了替换在同一行中出现多次出现的项目,必须指定在全局进行该操作。

de>[pvg@server ~]$ cat test | sed 's/line/LINE/g'
1 LINE LINE1
2 LINE LINE2
3 LINE LINE3
4 LINE LINE4
de>


2) -n选项

de>[pvg@server ~]$ sed -n '1,2p' test
1 line line1
2 line line2
de>

/*只显示1~2行*/

de>[pvg@server ~]$ sed -n '/line3/p' test
3 line line3
de>

/*只显示含有line3行*/

3) 删除行
 

de>[pvg@server ~]$ sed -n '1,2d' testde>

/*只删除1~2行*/

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

4 grep

grep命令可以从一个文件或多个文件中搜索特定的字符串。其格式为:
grep pattern files
如:grep shell ed.cmd

1、参数
grep -i pattern files :不区分大小写地搜索,默认情况区分大小写。
grep -v pattern files :查找不包括字符串的行。
grep -n pattern files :符合指定的模块的每一行前加上改行在文件中对应的行号。
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
2、grep正则表达式
1)$ grep '^a'
只显示以a开头的行。
2)$ grep 'test' d*
显示所有以d开头的文件中包含test的行。
3)$ grep 'test' aa bb cc
显示在aa,bb,cc文件中匹配test的行。
3)$ grep '[a-z]\{5\}' aa
显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
4)$ grep 'w\(es\)t.*\1' aa
如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行
。如果用egrep或grep -E,就不用"\"号进行转义,直接写成'w(es)t.*\1'就可以了。
5) $
锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
6).
匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
7)*
匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
8)[]
匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
9)[^]
匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-F和H-Z的一个字母开头,紧跟rep的行。
10)\(..\)
标记匹配字符,如'\(love\)',love被标记为1。
11)x\{m\}
重复字符x,m次,如:'o\{5\}'匹配包含5个o的行。
12)x\{m,\}
重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
13)x\{m,n\}
重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。



正则表达式是一种表示方式, 让你可以查找匹配特定准则的文本。
.    匹配任何单个的字符,但是null除外
*   匹配在它之前的任何数目的单个字符
.*   代表 匹配任一字符的任一长度
^    匹配前面的正则表达式 ,在字符串或者行的起始处
$   匹配前面的正则表达式,在字符串或行的结束处
[]    匹配方括号内的任一字符 ^符号置于方括号里第一个字符则有相反含义:指的是匹配不在列表内的任一字符
\{n,m\}      区间表达式,匹配在它前面的单个字符重现的次数区间。\{n\}是重现n次 ,\{n,\}至少重现n次,而\{n,m\}为重现n至m次
\(\)    将\(与\)间的模式存储在特殊的保留空间。最后可以将9个独立的子模式存储在单个模式中。匹配于子模式的文本,可以通过转义序列\1至\9,被重复使用在相同模式里。
\n      重复在\(\与)方括号内第n个子模式至此点的模式。
{n,m}      与\{n,m\}一样,用在扩展的正则表达式中 ,只不过方括号前没有反斜杠
+    匹配前面正则表达式的一个或多个实例   用在扩展的正则表达式中
?   匹配前面正则表达式的0个或1个实例    用在扩展的正则表达式中
|     匹配于| 符号前或后的正则表达式 用在扩展的正则表达式中
()   匹配于方括号扩起来的正则表达式群 用在扩展的正则表达式中
字符集:
[:alnum:] 数字字符
[:alpha:] 字母字符
[:blank:] 空格与定位字符
[:digit;] 数字字符
[:lower:] 小写字母字符
[:punct:] 标点符号字符
[:space:] 空白字符
[:upper:] 大写字母字符
Grep 查找 全文搜索正则表达式并打印出来,从文件中匹配整个模式,而后显示包含了匹配到得内容的行
Grep -v 反向显示
grep -n 在匹配到得结果中只显示输入的行数
grep -i 忽略大小写
grep -e 可以查找多个内容
grep -An 匹配到得行的后面的n行
grep -Bn 匹配到得行的前面的n行
grep -Cn 上下n行
grep -E 使用扩展正则表达式进行匹配
Cut 以段和列取内容
Cut -d: 以冒号隔开
Cut -f1 第一行
Cut -c2-6 第2-6个字符
Sort 排序 (对源文件没有影响,想保存用管道或sort -o 文件名)
Sort 默认以字符串排序
Sort -r 逆序
Sort -n 以数值来排序
Sort -f 忽略大小写
Sort -u 排序之后除去重复的行
Uniq 去除重复的行
Uniq -c 可以显示每行被重复的次数
Uniq -u 只显示不重复的行
Uniq -d 只显示重复的行
Sed 行编辑器
Sed -s 只替换源文件的第一个 加g 为每次都替换
Sed   起始位置 结束位置 /   / g
Sed -i 替换源文件
Sed -e 同时实现多项应用条件
Sed -f 从文件中读取条件的选项
Sed -i 忽略大小写
Sed a\ 在当前行之前插入文本
Sed -d 删除行 i\在当前行之前插入文本
  评论这张
 
阅读(1222)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016