黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图
您现在的位置: 黑客风云 >> 黑客文章 >> 操作系统 >> LINIX UNIX >> 文章正文
[推荐]使用Linux 文本工具简化数据的提取
      ★★★
使用Linux 文本工具简化数据的提取
文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2006-10-4
 
 cut

  使用 cut 工具,我们可以将构成文件中数据域的各个列分隔开来。默认的分隔符是制表符,-f 选项可以用来指定希望显示的域。

  举例来说,假设一个文本文件 “sample” 有三列,其内容如下所示:

one    two    three 
four   five   six 
seven  eight  nine 
ten    eleven twelve 

  现在执行下面的命令:

# cut -f2 sample 

  这会返回:

two 
five 
eight 
eleven 

  如果将这个命令修改成:

# cut -f1, 3 sample 

  这会返回下面的不同结果:

one    three 
four   six 
seven  nine 
ten    twelve 

  这个命令有几个命令行选项。除了 -f 之外,我们还应该熟悉下面两个选项:

  • -c —— 允许我们指定字符而不是域。
  • -d —— 允许我们指定其他分隔符,而不是制表符。

  cut:两个实际例子

  ls -l 命令可以显示某个目录中所有文件的权限、链接个数、属主、组、大小、日期和文件名 —— 这些都是以空格分隔开的。如果我们对大部分域都不感兴趣,而是只希望了解文件属主的信息,可以使用下面的命令:

# ls -l | cut -d" " -f5 
root 
562 
root 
root 
root 
root 
root 
root 

  这个命令只会显示文件属主(第 5 个域),而会忽略其他域。

  如果您知道文件属主信息开始的第一个字符的确切位置,可以使用 -c 选项来显示文件属主的第一个字符。假设它是从第 16 个字符开始的,下面这个命令就返回第 16 个字符,这是文件属主名的第一个字符。

# ls -l | cut -c16 
r 

r 
r 
r 
r 
r 
r 

  如果我们再假设大部分用户都使用最多 8 个字符作为自己的用户名,那么我们就可以使用下面的命令:

# ls -l | cut -c16-24 

  这会返回用户名域的那些项。

  现在假设文件名是从第 55 个字符开始的,但是我们无法确定文件名会连续占用多少个字符,因为有些文件名可能会比其他文件名长很多。解决方案是从第 55 个字符开始,但却不指定结束字符(这意味着我们要截取该行中所有剩余的内容),如下所示:

# ls -l | cut -c55- 
a.out 
cscope-15.5 
cscope-15.5.tar 
cscope.out 
memo 
search_items 
test.c 
test.s 

  现在我们来考虑另外一种情况。为了获得系统中所有用户的清单,我们可以从前面使用过的 /etc/passwd 文件中提取第一个域:

# cut -d":" -f1 /etc/passwd 
root 
bin 
daemon 
adm 
lp 
sync 
shutdown 
halt 
mail 
news 
uucp 
operator 

  要搜集用户名及其对应的主目录,我们可以提取第 1 个和第 6 个域的内容:

# cut -d":" -f1,6 /etc/passwd 
root:/root 
bin:/bin 
daemon:/sbin 
adm:/var/adm 
lp:/var/spool/lpd 
sync:/sbin 
shutdown:/sbin 
halt:/sbin 
mail:/var/spool/mail 
news:/etc/news 
uucp:/var/spool/uucp 
operator:/root 

 

上一页  [1] [2] [3] [4] [5] [6] 下一页  

文章录入:sygbox    责任编辑:sygbox 
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886