- 浏览: 662054 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yigeisme:
你好,不已.html和.jsp和.jpg结尾的正则表达式怎么写 ...
深入入门正则表达式(java) - 2 - 基本实例 -
su1216:
多谢指正yigeisme 写道1-12(小时,月份)正则:^( ...
深入入门正则表达式(java) - 2 - 基本实例 -
yigeisme:
1-12(小时,月份)正则:^(1[012]|\d)$应该改成 ...
深入入门正则表达式(java) - 2 - 基本实例 -
heikefangxianceshi:
小三将军 写道楼主,我想问下你给的Real.tar.gz是什么 ...
android手机root后的安全问题 (一) -
heikefangxianceshi:
这个程序运行的前提是手机root,但你的手机怎么root的呢? ...
android手机root后的安全问题 (一)
学习笔记,内容基础,适合初学者。
阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)
《Unix & Linux 大学教程》 - 第一、二章 学习笔记 Unix简介 & 什么是Linux?什么是Unix
《Unix & Linux 大学教程》 - 第三、四章 学习笔记 Unix连接 & 开始使用Unix
《Unix & Linux 大学教程》 - 第五、六章 学习笔记 GUI:图形用户界面 & Unix工作环境
《Unix & Linux 大学教程》 - 第七、八章 学习笔记 Unix键盘使用 & 能够立即使用的程序
《Unix & Linux 大学教程》 - 第九、十章 学习笔记 文档资料:Unix手册与Info & 命令语法
《Unix & Linux 大学教程》 - 第十一、十二章 学习笔记 shell & 使用shell:变量和选项
《Unix & Linux 大学教程》 - 第十三章 学习笔记 使用shell:命令和定制
《Unix & Linux 大学教程》 - 第十四、十五章 学习笔记 使用shell:初始化文件
《Unix & Linux 大学教程》 - 第二十一章 学习笔记 显示文件
《Unix & Linux 大学教程》 - 第二十二章(一) 学习笔记 vi文本编辑器(一)
《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记 vi文本编辑器 (二)
《Unix & Linux 大学教程》 - 第二十二章(三) 学习笔记 vi文本编辑器 (三)
《Unix & Linux 大学教程》 - 第二十四章 学习笔记 目录操作
《Unix & Linux 大学教程》 - 第二十五章 学习笔记 文件操作
《Unix & Linux 大学教程》 - 第二十六章(一) 学习笔记 进程和作业控制
《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记 进程和作业控制
《Unix & Linux 大学教程》 - 附录F 时区与24小时制时间
第十九章:过滤器:选取、排序、组合及变换
第十九章第二部分
基础知识
程序/命令
tr(translate,转换)
语法
tr [-cds] [set1 [set2]]
set1和set2为字符组
注意:不允许指定输入和输出文件,可以考虑使用重定向
tr a A < file(将file中的a替换为A)
tr abc ABC < file(将file中的a替换为A,b替换为B,c替换为C)
tr abcde ABC < file 等同于 tr abcde ABCCC < file
tr A-Z a-z < file (将大写转换为小写)
tr [:upper:] [:lower:] < file 等同于 tr A-Z a-z < file
tr [:digit:] A-J < file 等同于 tr 0-9 A-J < file
tr '\015' '\012' < file (其中的参数为ASCII的八进制数值,可以利用其替换不可见字符)
tr '\r' '\n' < file 等同于 tr '\015' '\012' < file
-s(squeeze,挤压):第一组中的多个连续字符应该替换为一个单独的字符
-d:删除指定的字符
-c(complement,补数):匹配所有不在第一组中的字符
tr 0-9 D < file(将0-9每一个数字都替换为一个字母D)
tr -s 0-9 D < file (将多个数字替换为一个字母D)
tr -d '()' < file (删除所有圆括号)
tr -d [:digit:] < file (删除所有数字)
tr -c ' \n' X < file (将空格和换行之外的所有字符替换为X)
题目:查看多个文本中出现过的单词数量(不计重复,不考虑大小写)
比如有两个文件
txt1内容为:
This is a test!
So you can ignore me.
txt2内容为:
Another file for test!
Hello world!
cat txt1 txt2 将两个文件合并
cat txt1 txt2 | tr 'A-Z ' 'a-z\n' 然后将空格替换为换行,大写变小写
cat txt1 txt2 | tr 'A-Z ' 'a-z\n' | tr -d ',.;:!' 然后去掉标点
cat txt1 txt2 | tr 'A-Z ' 'a-z\n' | tr -d ',.;:!' | sort -u 然后去掉重复,忽略大小写
cat txt1 txt2 | tr 'A-Z ' 'a-z\n' | tr -d ',.;:!' | sort -u | wc -l 最后统计行数,结果即为不重复单词的个数
上面的过程完成任务不够好,比如单词可以有撇号(o'clock)
所以要把所有非字母和撇号的字符替换为换行
cat txt1 txt2 | tr -cs A-Za-z\' '\n' | sort -fu | wc -l (sort也可以忽略大小写,这样就不用tr来做了)
书中答案
cat txt1 txt2 | tr -cs [:alpha:]\' "\n" | sort -fu | wc -l (貌似之前没有讲过[:alpha:])
sed(stream editor)
语法
sed [-i] command | -e command... [file]
command是sed命令
file是输入文件的名称
作用:简单替换文本
过程:
1.从输入流中读取一行
2.执行指定的命令,对该行进行必要的变换
3.将该行写入到输出流中
-i(in-place,原地):重定向到输入的文件中
(-i选择只在GNU版本的sed中可用)
sed 's/string/String/g' file > newfile (将单词string替换为String,然后将输出重定向到newfile中)
sed的命令s
语法
[/address|pattern/]s/search/replacement/[g] (其中g代表global)
address是输入流中一个或多个行的地址
pattern是一个字符串
search是正在表达式
replacement是替换文本
sed '2s/string/String/g' file (改变第二行的string为String)
sed '3,6s/string/String/g' file (改变第三至六行的string为String)
sed '1,$s/string/String/g' file (改变第一至最后一行的string为String)
sed '/OK/s/string/Stringg' file (改变含有OK字符串的行的string为String)
(关于正则的部分可参考下面第二十章的讲解,也可参考我之前介绍关于正则的文章:深入入门正则表达式)
语法
sed -f instructions input
-f:标识命令程序文件
作用:运行存储在文件instructions中的sed程序,并使用文件input中的数据
-e(editing command,编辑命令):指定任意多个sed命令
sed -i \
-e 's/mon/Monday/g' \
-e 's/tue/Tuesday/g' \
-e 's/wed/Wednesday/g' \
-e 's/thu/Thursday/g' \
-e 's/fri/Friday/g' \
-e 's/sat/Saturday/g' \
-e 's/sun/Sunday/g' \
calendar
将calendar中的mon替换为Monday;tue替换为Tuesday……最后重定向到calendar本身(-i不是忽略大小写,见上文说明)
第二十章:正则表达式
我在我的博客已经有专门介绍正则表达式使用的文章了
下面的文章主要介绍的是java中的正则,这里只介绍与java正则不同的地方。
深入入门正则表达式(java) - 1 - 入门基础
深入入门正则表达式(java) - 2 - 基本实例
深入入门正则表达式(java) - 3 - 正则在java中的使用
深入入门正则表达式(java) - 匹配原理 - 1 - 引擎分类与普适原则
深入入门正则表达式(java) - 匹配原理 - 2 - 回溯
在java的正则中,我们使用\b作为单词分隔符,但是在这里,我需要使用\<和\>作为单词分隔符
在使用GNU实用工具的系统上(例如Linux和FreeBSD)可以使用\b
下面的预定义类在java中是没有的
类 | 含义 | 类似于 |
[:lower:] | 小写字母 | a-z |
[:upper:] | 大写字母 | A-Z |
[:alpha:] | 大小写字母 | a-zA-Z |
[:alnum:] | 大小写字母、数字 | a-zA-Z0-9 |
[:digit:] | 数字 | 0-9 |
[:punct:] | 标点符号 | -- |
[:blank:] | 空格或制表符(空白符) | -- |
Unix支持下面两种正则表达式
扩展正则表达式(extended regular expression,ERE)是现代版的正则表达式
基本正则表达式(basic regular expression,BRE)是一个以前的废弃版本正则表达式
下面是两种正则表达式的区别
扩展正则表达式 | 基本正则表达式 | 含义 |
{} | \{\} | 定义一个限定(花括号) |
() | \(\) | 定义一个组(圆括号) |
? | \{0,1\} | 匹配0次或1次 |
+ |
\{1,\} | 匹配一次或多次 |
| | -- | 交变:匹配选项中的一个 |
[:name:] | -- | 预定义字符类 |
下面三条命令等价
grep -w 'cat' data
grep '\<cat\>' data
grep '\bcat\b' data
关于预定义字符类的使用
下面两条正则等价,查找非字母字符的行,最外层的括号并不作为字符组本身的一部分,所以使用预定义字符类的时候需要有两层方括号
grep '[^A-Za-z]' data
grep '[^[:alpha:]]' data
注意:字符组的使用需要注意locale的设置。检查环境变量是否LC_COLLATE=C,否则[a-z]和[A-Z]等结果可能不是你所期待的。
下面是书中三个问题,都很简单,这里直接给出问题和答案
1.查找字典文件中,以qu开头y结尾的单词(我机器的字典文件在/usr/share/dict下,words文件)
grep '^qu[a-z]*y' words
2.查找字典文件中,依次含有a、e、i、o、u
grep 'a[a-z]*e[a-z]*i[a-z]*o[a-z]*u' words
3.查找bin目录下两个字母长的命令
ls /bin | grep '^[a-z]\{2\}$'
ls /bin | egrep '^[a-z]{2}$'
关于正则的更多规则与技巧可以参考上面提到的我介绍正则的文章
名词解释
预定义字符类:字符集。比如[:digit:]、[:upper:]等
发表评论
-
Linux书籍笔记目录
2013-12-12 10:53 0内建命令 命令 描述 章节 页码 章节 ... -
《Unix & Linux 大学教程》 - 附录F
2012-11-15 22:15 2503学习笔记,内容基础,适合初学者。 阅读之前,请务必 ... -
《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记
2012-11-13 23:26 3218学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第二十六章(一) 学习笔记
2012-11-07 11:15 2334学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第二十五章 学习笔记
2012-10-31 16:22 2745学习笔记,内容基础,适合初学者。 阅读之前,请务必 ... -
《Unix & Linux 大学教程》 - 第二十四章 学习笔记
2012-10-25 16:34 2532学习笔记,内容基础,适合初学者。 阅读之前,请 ... -
《Unix & Linux 大学教程》 - 第二十三章 学习笔记
2012-10-23 13:31 1934学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第二十二章(三) 学习笔记
2012-10-19 18:54 2123学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记
2012-10-18 14:43 1703学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第二十二章(一) 学习笔记
2012-10-09 17:30 2578学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第二十一章 学习笔记
2012-09-24 16:30 2431学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第十九章(一) 学习笔记
2012-09-14 18:11 2485学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第十八章 学习笔记
2012-08-22 15:40 2394学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第十六、十七章 学习笔记
2012-08-21 10:57 2820学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第十四、十五章 学习笔记
2012-08-17 14:34 3289学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第十三章 学习笔记
2012-08-14 11:43 4511学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第十一、十二章 学习笔记
2012-08-08 18:24 3992学习笔记,内容基础,适合初学者。 阅读之 ... -
《Unix & Linux 大学教程》 - 第九、十章 学习笔记
2012-08-07 15:07 2351学习笔记,内容基础,适合初学者。 阅读之前, ... -
《Unix & Linux 大学教程》 - 第七、八章 学习笔记
2012-08-06 17:16 2951学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第五、六章 学习笔记
2012-08-03 13:52 3523学习笔记,内容基础,适合初学者。 阅读之前,请务 ...
相关推荐
UNIX&LINUX;大学教程.pdf
Unix & Linux大学教程Unix & Linux大学教程Unix & Linux大学教程
UNIX&LINUX大学教程重点整理终极版.docx
Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和...
被誉为最好的Linux shell入门教程
《Unix & Linux大学教程》内容简介:Unix是计算机发展历史上最成功的...在《Unix & Linux大学教程》中,不仅可以全面学习到Unix和Linux操作系统的工作原理和主要命令,还可以知晓Unix和Linux发展史上的许多奇闻趣事。
vi 学习笔记——取自《Unix&Linux;大学教程》,vi 学习笔记——取自《Unix&Linux;大学教程》
本教程为外文资料中文版,主要讲述Linux和Unix的基础知识,是一份非常适合初学者的Linux资料
高教类课件:Unix & Linux 大学教程
Unix&Linux大学教程+实验+样题.7z
大学经典的教材,Unix&Linux;大学教程,这个ppt就是和这本书配套的。
在本书中,不仅可以全面学习到Unix和Linux操作系统的工作原理和主要命令,还可以知晓Unix和Linux发展史上的许多奇闻趣事。 另外,本书还解释了622个Unix专业术语,许多术语都给出了其历史来源;书中的示例涵盖了...
UNIX&Linux;大学教程,是国外一本经典的UNIX入门教程,该资源为英文原版。希望学习UNIX的同学可以下载下来看一看,挺好的一本书。
根据原著勘误表及本人阅读过程中发现的错误,以pdf文档的注释形式将所有错误进行全部更正。
电子科技大学<UNIX&Linux操作系统编程>课程课件1,详细讲解Linux操作系统命令等基础知识
UNIX&Linux操作系统编程-操作系统基本知识.ppt
【Unix&Linux;】较全的文档,文件大小100多mb,入门学习;
Unix&Linux;资料
IBM UNIX&Linux- AIX 5L 系统管理技术 于宁斌,很好的aix入门书籍。由于是影印版,个头比较大,分为两部分。