忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 449 | 回复: 1

[服务应用] 使用 Linux/Unix 进行文本处理 [复制链接]

论坛徽章:
0
发表于 2017-02-23 16:32 |显示全部楼层
正则表达式
翻译领域不乏让人摸不着头脑的词汇,比如“句柄”、“套接字”、“鲁棒性”。当然,“正则表达式”也属于这一类词汇。我刚接触正则表达式的时候,对这个名词感到非常迷惑。深入了解之后,才突然明白,原来所谓的 regular expression, 其实就是“有规律、有模式的字符串”而已。
很少有一门技术,只需要投入少量的学习成本即可获得巨大的价值回报。正则表达式就属于这一类技术。可惜很多人被它密码般的语法形式当头棒喝,甚至连门都不得而入。
为什么你应该学习正则表达式?其一,在实践中应用这门技术其实不难,只需理解为数不多的几个元字符以及并不复杂的语法,就能够获得强大的文本操控能力;其二,正则表达式往往能提供处理文本的最简单最高效的解决方法(有时也许是唯一的解法)。遇上复杂的情况,如果你不会正则表达式,就只好束手无策、黯然神伤了。
正则表达式入门容易,精通却难。本文并不打算挑战此项任务,如果你希望系统地学习正则表达式,请一定阅读 Jeffrey Friedl 的著作 精通正则表达式
正则表达式

文本检索
grep 命令可以完成简单的文本搜索任务。
先来准备一份文本材料,把 grep 的帮助页保存为文本文件:
  • >mangrep| col -b > grephelp.txt
下面,我想检索 grephelp.txt 文件中所有包含 "find" 这个单词的文本行:
  • >grep"find" grephelp.txt
  • Tofind all occurrences of the word `patricia' in a file:
  • To find all occurrences of the pattern `.Pp' at the beginning of a line:
  • To find all lines in a file which do not contain the words `foo'or
我希望匹配到的文本使用不同的颜色显示,可以添加 --color 选项,默认的颜色是红色。
  • >grep--color "find" grephelp.txt
我希望在匹配结果中显示文件名和行号,使用 -H 选项可以显示文件名,使用 -n 选项可以显示行号:
  • >grep-H -n --color "find" grephelp.txt
  • grephelp.txt:252:Tofind all occurrences of the word `patricia' in a file:
  • grephelp.txt:256: To find all occurrences of the pattern `.Pp' at the beginning of a line:
  • grephelp.txt:265: To find all lines in a file which do not contain the words `foo'or
很多时候,我们需要知道匹配行前后的上下文。-A 和 -B 这两个选项会是你的好朋友。-A n 表示显示匹配行以及其后的 n 行;-B n 表示显示匹配行以及之前的 n 行。现在,我们在匹配行的前后分别额外显示两行:
  • >grep-A 2-B 2-H -n --color "find" grephelp.txt
  • grephelp.txt-250-
  • grephelp.txt-251-EXAMPLES
  • grephelp.txt:252:Tofind all occurrences of the word `patricia' in a file:
  • grephelp.txt-253-
  • grephelp.txt-254- $ grep 'patricia' myfile
  • --
  • --
  • grephelp.txt-254- $ grep 'patricia' myfile
  • grephelp.txt-255-
  • grephelp.txt:256: To find all occurrences of the pattern `.Pp' at the beginning of a line:
  • grephelp.txt-257-
  • grephelp.txt-258- $ grep '^\.Pp' myfile
  • --
  • --
  • grephelp.txt-263- match any character.
  • grephelp.txt-264-
  • grephelp.txt:265: To find all lines in a file which do not contain the words `foo'or
  • grephelp.txt-266-`bar':
  • grephelp.txt-267-
如果需要查找所有不包含 "find" 的文本行,该怎么做呢?很简单,使用 -v 选项即可。
grep 还有两个变体,egrep 和 fgrep。相对于仅支持基本正则模式(BREs)的 grep 来说,egrep 支持扩展正则模式(EREs),因而检索能力更为强大;fgrep 是所有三个工具中速度最快的一个,因为它完全不支持正则模式。
其实,我更喜欢一个叫做 ack 的工具。
ack

文本替换
tr 命令可以完成简单的字符转换任务。例如,可以通过 tr 把 grephelp.txt 文件转换为全文大写:
  • >cat grephelp.txt |tr'[:lower:]''[:upper:]'
简而言之,tr 的工作就是把第一个集合中的字符转换为第二个集合中的相应的字符。常用的字符集合有下面这些:
  • [:alnum:]:字母数字
  • [:alpha:]:字母
  • [:cntrl:] :控制字符
  • [:digit:]:数字
  • [:graph:]: 图形字符
  • [:lower:]:小写字母
  • [:print:]:可打印字符
  • [:punct:]:标点符号
  • [:space:]:空白字符
  • [:upper:]:大写字母
  • [digit:]:十六进制数字
tr 命令的应用场景非常受限,如果希望进行更加灵活的模式替换,我们还有 sed(也就是 stream editor,流编辑器)。
把文件中所有的 "find" 文本替换为 "search":
  • >sed"s/find/search/g" grephelp.txt
这条命令中,s 表示执行“替换操作”,/find/search/ 表示把 "find" 替换为 "search",g 表示对一行中所有的匹配进行替换。sed 默认把处理结果打印到标准输出,我们可以通过重定向把处理结果转储到一个新文件中,或者使用选项 -i 把结果直接写回原文件(有风险,需谨慎):
  • >sed-i "s/find/search/g" grephelp.txt
把文件中所有的数字 n 替换为 "--n--" 的形式��
  • >sed-E "s/([0-9]+)/--\1--/g" grephelp.txt
选项 -E 表示在处理过程中使用扩展的正则模式(EREs),替换命令中的 \1 表示引用正则表达式的第一个捕获分组。请注意,-E 这个选项只在 Mac OS X 系统和 FreeBSD 系统上有效,其他 Unix 系统需要使用另一个等效的选项 -r。
sed 的功能远不止这一些,篇幅所限,不可能详细讲解 sed 的用法。如果希望学习更多,请移步这篇文章

文本去重
  • >cat-n sonnet116.txt
  • 1Let me not to the marriage of true minds
  • 2Admit impediments.Loveisnot love
  • 3Which alters when it alteration finds,
  • 4Or bends with the remover to remove:
  • 5 O,no! it is an ever-fix`ed mark,
  • 6 O, no! it is an ever-fix`ed mark,
  • 7That looks on tempests andis never shaken;
  • 8Itis the star to every wand'ring bark,
  • 9 Whose worth's unknown, although his heighth be taken.
  • 10Love's not Time's fool, though rosy lips and cheeks
  • 11Love's not Time's fool, though rosy lips and cheeks
  • 12Love's not Time's fool, though rosy lips and cheeks
  • 13Within his bending sickle's compass come;
  • 14 Love alters not with his brief hours and weeks,
  • 15 But bears it out even to the edge of doom:
  • 16 If this be error and upon me proved,
  • 17 I never writ, nor no man ever loved.
这是莎士比亚的一首十四行诗,只可惜第5行和第10行有重复(而且第10行重复了3次)。怎么查看文本中重复的行呢?uniq 命令可以帮助你。
  • >uniq-d sonnet116.txt
  • O,no! it is an ever-fix`ed mark,
  • Love's not Time's fool, though rosy lips and cheeks
选项 -d 表示仅输出重复的行。如果需要去重,使用不带选项的 uniq 命令就可以了:
  • >uniq sonnet116.txt
  • Let me not to the marriage of true minds
  • Admit impediments.Loveisnot love
  • Which alters when it alteration finds,
  • Or bends with the remover to remove:
  • O,no! it is an ever-fix`ed mark,
  • That looks on tempests and is never shaken;
  • It is the star to every wand'ring bark,
  • Whose worth's unknown, although his heighth be taken.
  • Love's not Time's fool, though rosy lips and cheeks
  • Within his bending sickle's compass come;
  • Love alters not with his brief hours and weeks,
  • But bears it out even to the edge of doom:
  • If this be error and upon me proved,
  • I never writ, nor no man ever loved.
想要查看每一行究竟重复了多少次?没问题,使用选项 -c:
  • >uniq-c sonnet116.txt
  • 1Let me not to the marriage of true minds
  • 1Admit impediments.Loveisnot love
  • 1Which alters when it alteration finds,
  • 1Or bends with the remover to remove:
  • 2 O,no! it is an ever-fix`ed mark,
  • 1 That looks on tempests and is never shaken;
  • 1 It is the star to every wand'ring bark,
  • 1 Whose worth's unknown, although his heighth be taken.
  • 3 Love's not Time's fool, though rosy lips and cheeks
  • 1 Within his bending sickle's compass come;
  • 1 Love alters not with his brief hours and weeks,
  • 1 But bears it out even to the edge of doom:
  • 1 If this be error and upon me proved,
  • 1 I never writ, nor no man ever loved.

文本排序
假设有这样一个报表文件,第一列是月份,第二列是当月的销售个数:
  • >cat report.txt
  • March,19
  • June,50
  • February,17
  • May,18
  • August,16
  • April,31
  • May,18
  • July,26
  • January,24
  • August,16
这个文件的内容不仅顺序是乱的,而且还有重复。我希望按字母表顺序排序,可以下面这个命令:
  • >sort report.txt
  • April,31
  • August,16
  • August,16
  • February,17
  • January,24
  • July,26
  • June,50
  • March,19
  • May,18
  • May,18
选项 -u (表示 unique)可以在排序结果中去除重复行:
  • >sort-u report.txt
  • April,31
  • August,16
  • February,17
  • January,24
  • July,26
  • June,50
  • March,19
  • May,18
能不能按照月份排序呢?选项 -M (表示 month-sort)可以帮助我们:
  • >sort-u -M report.txt
  • January,24
  • February,17
  • March,19
  • April,31
  • May,18
  • June,50
  • July,26
  • August,16
按照第二列的数字进行排序也是很简单的:
  • >sort-u -t','-k2 report.txt
  • August,16
  • February,17
  • May,18
  • March,19
  • January,24
  • July,26
  • April,31
  • June,50
上面的例子中,选项 -t',' 表示以逗号为分隔符对文本进行列分割;-k2 表示对第2列进行排序。
当然了,把结果逆序排列也并非不可能:
  • >sort-u -r -t','-k2 report.txt
  • June,50
  • April,31
  • July,26
  • January,24
  • March,19
  • May,18
  • February,17
  • August,16

文本统计
wc 命令用来完成文本统计工作,通过使用不同的选项,它可以统计文件中的字节数(-c),字符数(-m),单词数(-w)与行数(-l)。
例如,查看 grephelp.txt 这个文件总共有多少个单词:
  • >wc-w grephelp.txt
  • 1571 grephelp.txt
查看 sonnet116.txt 这个文件总共有多少不重复的行(废话,十四行诗当然是有14行):
  • >uniq sonnet116.tx6 |wc-l
  • 14

更多内容:http://www.wangzhanjianshegs.com/网站建设

论坛徽章:
0
发表于 2017-09-06 11:23 |显示全部楼层
全球前三的IP语音和视频设备的供应商,全球600多人,杭州研发中心有200多人,老板是美籍华人。
联系人:刘玉婷  电话:18758230569(绑定微信)
地址:杭州西湖区
一:高级Linux驱动开发工程师(Android设备方向)   年薪20-30万
岗位职责:
参与Android平台上的驱动和HAL层开发工作,并配合硬件人员的调试工作。
任职要求:
1、熟悉ARM平台的嵌入式系统开发过程,熟悉ARM的体系结构及相关底层软件的开发;
2、熟悉Uboot移植,Linux内核裁剪,根文件系统定制;
3、熟练掌握Linux驱动模型,熟悉CPU外设接口驱动程序(如I2C、SPI、I2S/PCM、LCD、以太网接口驱动调试等 );
4、具有丰富的Linux设备驱动调试经验和较强的软件bug定位和分析能力,具备较强的软硬件调试能力;
5、精通C语言,熟悉UNIX/Linux操作系统上的软件开发和编译环境,具有良好的编程风格;
6、有WiFi、蓝牙、HDMI等外设调试开发经验者优先考虑;有Android平台移植和Android设备开发经验者优先考虑。


二:系统软件主管     年薪:28-40万
1、 负责Android平台/Linux平台产品架构设计;
2、 2、负责产品性能优化、驱动开发及维护工作;
3、指导开发工程师进行驱动开发;
任职要求:
1、熟悉ARM平台的嵌入式系统开发过程,熟悉ARM的体系结构及相关底层软件的开发;
2、熟悉Uboot移植,Linux内核裁剪,根文件系统定制;
3、熟练掌握Linux驱动模型,熟悉CPU外设接口驱动程序(如I2C、SPI、I2S/PCM、LCD、以太网接口驱动调试等 );
4、精通C语言,熟悉UNIX/Linux操作系统上的软件开发和编译环境,具备较强的软硬件调试能力;
5、有以下其一经验者尤佳:
     1)Android平台移植、Android设备开发经验;
     2)WiFi/蓝牙/HDMI外设调试经验;
     3)SIP网关或服务器、语音板卡类相关经验;
     4)AP交换机、视频会议系统、终端产品等经验
第1页,共2页
来自苹果客户端来自客户端
您需要登录后才可以回帖 登录 | 注册

本版积分规则

SACC2017购票8.8折优惠进行时

2017中国系统架构师大会(SACC2017)将于10月19-21日在北京新云南皇冠假日酒店震撼来袭。今年,大会以“云智未来”为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置2大主会场,18个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100余位技术专家及行业领袖来分享他们的经验;并将吸引4000+人次的系统运维、架构师及IT决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年8月2日前

活动链接>>
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP