Tags:
create new tag
, view all tags

深入浅出Shell 编程:Unix/Linux 命令(2)

1 需求:

这里是一篇文本:
泰安永佳塑料有限公司,xiaoli
泰安永佳塑料有限公司,Xiaoli
扬州唐城车灯厂,xiaoLi
汕头市鲁班装饰设计工程有限公司,方少雄
沈阳中模技术开发有限公司,张弘
沈阳希望第一小学,王老师
宁波万力达集团有限公司,王徐涛
浙江大学党委学生工作部,于世英
上海雨鼎电子有限公司,王冬阳
上海金门对外贸易公司,文豆豆
北京哥哥的网络科技有限公司,刘勇
北京哥哥的网络科技有限公司,刘勇
宁波恒康食品有限公司,黄小姐
大连中山区海大电脑信息咨询服务中心,杨军
大连中山区海大电脑信息咨询服务中心,杨军
大连中山区海大电脑信息咨询服务中心,杨军
大连中山区海大电脑信息咨询服务中心,杨军
北京蒙泰科技发展有限公司,秦大庆
北京蒙泰科技发展有限公司,秦大庆
慈溪市三士电子有限公司,俞立军
慈溪市三士电子有限公司,俞立军
慈溪市三士电子有限公司,俞立军
慈溪市三士电子有限公司,俞立军
慈溪市三士电子有限公司,俞立军
临海市顺风塑料工艺厂,李建平
永远盈智深圳分公司,李旭龙
永远盈智深圳分公司,李旭龙
广州市荔湾区豪光服装店,廖伟豪
淄博市美术馆画廊,孙江
北京市热水锅炉厂,刘超
北京市热水锅炉厂,刘超
北京市热水锅炉厂,刘超
北京市热水锅炉厂,刘超
北京市热水锅炉厂,刘超
北京市热水锅炉厂,刘超
北京市热水锅炉厂,刘超
下面是需求:
  1. 过滤重复记录。
  2. 查找所有包含"电子"的记录。
  3. 查找所有以"上海"开始的记录
  4. 查找所有不包含"沈阳"的记录。
  5. 查找所有以"军"结尾的记录
  6. 查找所有包含"xiaoli"的记录,忽略大小写。
知道如何解决吗?看完下面得介绍,你就会了。

1 grep, egrep, fgrep

知道什么是grep吗?Global Regular Expression Print,每个词首字节的缩写。

这组命令以指定模式搜索文件(模式是什么,别急看看例子), 并通知用户在什么文件中搜索到与指定的模式匹配的字符串, 并打印出所有包含该字符串的文本行, 在该文本行的最前面是该行所在的文件名. 其三者的区别是

  • grep命令一次只能搜索一个指定的模式;
  • egrep命令检索扩展的正则表达式(包括表达式组和可选项) ;
  • fgrep命令检索固定字符串,它不识别正则表达式,是快速搜索命令.
这组命令在搜索与定位文件中特定的主题方面非常有用.要搜索的模式可以被认为是一些关键词,您可以用它们来搜索文件中包含的这些关键词. 编写程序时,可以用它来寻找某一个函数,或是相关的词组. grep命令的搜索功能比fgrep强大,因为grep命令的搜索模式可以是正则表达式,而fgrep却不能.

该组命令中的每一个命令都有一组选项,利用这些选项可以改变其输出方式. 例如,可以在搜索到的文本行上加行号,或者只输出文本行的行号, 或者输出所有与搜索模式不匹配的文本行,或只简单地输出已搜索到 指定模式的文件名,并且可以指定在查找模式时忽略大小写.

这组命令在指定的输入文件中查找与模式匹配的行.如果没有指定文件,则从标准输入中读取.正常情况下,每个匹配的行显示到标准输出.如果要 查找的文件是多个,则在每一行输出之前加上文件名.

语法∶

  • grep [选项] [查找模式] [文件名1,文件名2,……]
  • egrep [选项] [查找模式] [文件名1,文件名2,……]
  • fgrep [选项] [查找模式] [文件名1,文件名2,……]

这组命令各个选项的含义为∶

  • E 每个模式作为一个扩展的正则表达式对待.
  • F 每个模式作为一组固定字符串对待(以新行分隔),而不作为正则表达式.
  • b 在输出的每一行前显示包含匹配字符串的行在文件中的字节偏移量.
  • c 只显示匹配行的数量.
  • i 比较时不区分大小写.
  • h 在查找多个文件时,指示grep不要将文件名加入到输出之前.
  • l 显示首次匹配串所在的文件名并用换行符将其隔开.当在某文件中多次出现匹配串时,不重复显示此文件名.
  • n 在输出前加上匹配串所在行的行号(文件首行行号为1).
  • v 只显示不包含匹配串的行.
  • x 只显示整行严格匹配的行.
  • e expression 指定检索使用的模式.用于防止以“-”开头的模式被解释为命令选项.
  • f expfile 从expfile文件中获取要搜索的模式,一个模式占一行.

对该组命令的使用还需注意以下方面∶

  1. 在命令后键入搜索的模式,再键入要搜索的文件. 其中,文件名列表中也可以使用特殊字符, 如“*”可以生成全部文件的文件名列表.
  2. 如果想在搜索模式中包含有空格的字符串,可以用单引号把要搜索的模式括起来,用来表明搜索的模式是由包含空格的字符串组成. 否则,Shell将把空格认为是命令行参数的定界符,而grep命令将把搜索模式中的单词解释为文件名列表中的一部分.

sort

sort 顾名思义,就是用来排序的工具。 -- WinterWen - 05 Jul 2005
Topic revision: r5 - 2005-12-18 - WinterWen
 
This site is powered by the TWiki collaboration platformCopyright © 2008-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback 京ICP备05049167号