Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2149503
  • 博文数量: 361
  • 博客积分: 10828
  • 博客等级: 上将
  • 技术积分: 4161
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-20 14:34
文章分类

全部博文(361)

文章存档

2011年(132)

2010年(229)

分类: LINUX

2010-01-29 10:15:55

有时我们经常会遇到这样一些问题:有一页电话号码薄,上面按顺序规则地写着人名、家庭住址、电话、备注等,此时我们只想取出所有人的名字和其对应的电话号码,你有几种方法可以实现呢?

以下内容欢迎转载,但请保留作者名号及出处,谢谢!
原创:frozen_sucker
 
确实这种纵向定位的方式用常规办法难以实现,这时,cut就可以大显身手了。
 
 
What’s cut?
子曰:cut命令可以从一个文本文件或者文本流中提取文本列。
 
 
命令用法:
       cut -b list [-n] [file ...]
       cut -c list [file ...]
       cut -f list [-d delim][-s][file ...]
 
 
l      上面的-b、-c、-f分别表示字节、字符、字段(即byte、character、field);
l      list表示-b、-c、-f操作范围,-n常常表示具体数字;
l      file表示的自然是要操作的文本文件的名称;
l      delim(英文全写:delimiter)表示分隔符,默认情况下为TAB;
l      -s表示不包括那些不含分隔符的行(这样有利于去掉注释和标题)
 
 
上面三种方式中,表示从指定的范围中提取字节(-b)、或字符(-c)、或字段(-f)。
 
 
范围的表示方法:
N
 只有第N项
 
N-
 从第N项一直到行尾
 
N-M
 从第N项到第M项(包括M)
 
-M
 从一行的开始到第M项(包括M)
 
-
 从一行的开始到结束的所有项
 

 
 
下面是实例,先以较简单的“命令用法”中提及的第二条开始讲起:

shell>> cat example
test2
this is test1
shell>> cut -c1-6 example ## print 开头算起前 6 个字元
test2
this i
UKoo音乐 ?5H#k l A Q Y ] v ` j6E e&c m x'D0UKoo音乐,Z8H A M B C cUKoo音乐+V ? T O ] L _ nUKoo音乐 \-Q3r T q r5K

M%? x;h m q d&f H0

C7T'm W E*D#^ p v8t0-c m-n 表示显示每一行的第m个字元到第n个字元。例如: UKoo音乐 V-t t#q2D T y C,L

UKoo音乐 ] ?-V a1z Q0? z r [

---------file-----------
liubi 23 14000
---------file-----------
# cut -c 1-5,10-14 file
liubi 14000
UKoo音乐 ? Z c e D RUKoo音乐/M.z)G'i d J.L ?4K"D g ]$P Q0UKoo音乐 I#Y"N l5i [/S

f w B;j&Q'w v'K0

/d n E![)f E0-f m-n 表示显示第m栏到第n栏(使用tab分隔)。例如:
---------file-----------
liubi 23 14000
---------file-----------
# cut -f 1,3 file
liubi 14000
S#j s2Q F P y z i j _0 7F-^3u5S `0 I b G ]3t T K ~$X0UKoo音乐 u S2c r#T r:j9cUKoo音乐 D(M2J ~(u c"\(b*N Y XUKoo音乐 B u H4e ~ {

"| i/u y B"A k x k0-c 和 -f 参数可以跟以下子参数:
m 第m个字符或字段
m- 从第m个字符或字段到文件结束
m-n 从第m个到第n个字符或字段
-n 从第1个到第n个字符或字段
[ q Y*v u'E0 9^ E/a$d-L4`+x;B4B O v0UKoo音乐 V { _,S JUKoo音乐 l+Y c/g3o&n C S1o!W

9\1I i h W6E!? G0 UKoo音乐 R Z/t K ~ n p*y S Q l我们经常会遇到需要取出分字段的文件的某些特定字段,例如 /etc/password就是通过":"分隔各个字段的。可以通过cut命令来实现。例如,我们希望将系统账号名保存到特定的文件,就可以:
cut -d: -f 1 /etc/passwd > /tmp/users
-d用来定义分隔符,默认为tab键,-f表示需要取得哪个字段
如:
使用|分隔
cut -d'|' -f2 1.test>2.test
使用:分隔
cut -d':' -f2 1.test>2.test
这里使用单引号或双引号皆可。
 
 
阅读(1736) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~