文本处理工具
一、文本处理命令less,cat,more,sort
1.less
less :一页一页地查看文件或STDIN 输出
查看时有用的命令包括:
/文本 搜索 文本
n/N 个 跳到下一个 or 上一个匹配
less 命令是man 命令使用的分页器
2.cat
文件查看命令:cat, tac,
cat [OPTION]… [FILE]…
-E: 显示行结束符$
-n: 对显示出的每一行进行 编号
-A :显示所有控制符
-b: 非空行编号
-s: 压缩连续的空行成一行
cat f1 f2 同列合并 paste f1 f2 同行合并
paste -d 分隔符 -s 所有行合并成一行
3.more
more: 分页查看文件
more [OPTIONS…] FILE…
-d: 显示翻页及退出提示
4.wc
wc 文件名 得到的是行数 单词数 字符数
使用 -l 来只计数行数
使用 -w 来只计数单词总数
使用 -c 来只计数字节总数
使用 -m 来只计数字符总数
字符与字节不相同
5.sort
文本排序sort
把整理过的文本显示在STDOUT ,不改变原始文件
$ sort [options] file(s)
v 常用选项
Ü -r 执行反方向(由上至下)整理
Ü -n 执行按数字大小整理
Ü -f 选项忽略(fold )字符串中的字符大小写
Ü -u 选项(独特,unique )删除输出中的重复行
Ü -t c 选项使用c 做为字段界定符
Ü -k X 选项按照使用c 字符分隔的X 列来整理能够使用多次
例证:sort -t: -k 3 -n /etc/getent 对/etc/getent中以:为分隔符的第三列的内容,按照内容数字大小进行排列,若要倒序排列则+r
二、文件截取:head和tail
1.head
head [OPTION]… [FILE]…
-c #: 指定获取前# 字节
-n #: 指定获取前#行 行
-#: 指定行数
2.tail
tail [OPTION]… [FILE]…
-c #: 指定获取后# 字节
-n #: 指定获取后#行
-f: 跟踪显示文件新追加的内容, 常用日志监控
三、按列抽取:cut
cut [OPTION]… [FILE]…
-d DELIMITER: 指明分隔符,默认tab
-f FILEDS:
#: 第# 个字段
#,#[,#] :离散的多个字段,例如1,3,6
#-# :连续的多个字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
–output-delimiter=STRING
举例1:cut -d: -f1,3,5-7 /etc/passwd
以:作为分隔符,查看/etc/passwd中的第1,3,5-7列的内容
举例2:使用cut将电脑的IP地址提取出来。
经过观察,这些信息极为不规则,没有明显的分隔符。这时们需要首先提取出IP地址所在的行,然后去定义一个合适的分隔符,再利用cut进行提取即可。(思路:化繁为简,化不规则为规则,这样才能更好的套用我们的命令模型)
四、按关键字抽取:grep
作用:文本搜索工具,根据用户指定的“模式”对目标文
本逐行进行匹配检查;打印匹配到的行;
–color=auto: 对匹配到的文本着色显示;
-v: 显示不能够被pattern 匹配到的行;
-i: 忽略字符大小写
-n: : 显示匹配的行号
-c: 统计匹配的行数
-o: 仅显示匹配到的字符串;
-q: 静默模式,不输出任何信息
-A # :after, 后#行 行
-B #: before, 前#行 行
-C # :context, 前后各#行 行
-e :实现多个选项间的逻辑or 关系
grep –e ‘cat ’ -e ‘dog’ file
-w :整行匹配整个单词
-E :使用ERE
REGEXP :由一类特殊字符及文本字符所编写的模式,其中有
些字符(元字符)不表示字符字面意义,而表示控制或通配
的功能
v 程序支持:grep, vim, less,nginx等 等
v 分两类:
基本正则表达式:BRE
扩展正则表达式:ERE
grep -E, egrep
v 正则表达式引擎:
采用 不同 算法,检查处理正则表达式的软件模块
PCRE(Perl Compatible Regular Expressions)
字符匹配:
. : 匹配任意单个字符;
[] : 匹配指定范围内的任意单个字符
[^] :匹配指定范围外的任意单个字符
[:digit:] 、[:lower:] 、[:upper:] 、[:alpha:] 、[:alnum:]
[:punct:] 、[:space:]
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* :匹配前面的字符任意次,包括0次 次
贪婪模式:尽可能长的匹配
.* :任意长度的任意字符
\? :匹配其前面的字符0 或1次
\+ :匹配其前面的字符至少1次
\{m\} :匹配前面的字符m次
\{m,n\} :匹配前面的字符至少m 次,至多n次
\{,n\} :匹配前面的字符至多n次
\{m,\} :匹配前面的字符至少m次
位置锚定:定位出现的位置
^ :行首锚定,用于模式的最左侧
$ :行尾锚定,用于模式的最右侧
^PATTERN$: 用于模式匹配整行
^$: 空行
^[[:space:]]*$ :空白行
\< 或 或 \b :词首锚定,用于单词模式的左侧
\> 或 或 \b :词尾锚定;用于单词模式的右侧
\<PATTERN\>
分组:\(\) :将一个或多个字符捆绑在一起,当作一个整体进
行处理,如:\(root\)\+
分组括号中的模式匹配到的内容会被正则表达式引擎记录
于内部的变量中,这些变量的命名方式为: \1, \2, \3, …
\1: 从左侧起,第一个左括号以及与之匹配右括号之间
的模式所匹配到的字符;
实例: \(string1\+\(string2\)*\)
\1: string1\+\(string2\)*
\2: string2
后向引用:引用前面的分组括号中的模式所匹配字符(而 而
非模式本身)
实例应用
一、 tail可用于日志的监视
在命令行输入:tail -n 20 -f /var/log/messsages 这样可以实时监测日志的变化。
通过logger “this is a test log”来触发新日志的产生
tail -n 0 -f filename &
二、比较两个文件之间的不同或者回复文件
diff -u a.txt b.txt > diff.log
[root@centos6testdir]#diff -u a.txt b.txt >diff.log
上述操作后,a.txt和b.txt的差异记录在了diff.log中
若之后,b.txt不小心删除掉了,则可以利用a.txt和diff.log来恢复b.txt文件。
此时用到patch命令,此时得到的a.txt文件,其内容实际就是误删除掉的b.txt文件的内容,而真正的a.txt文件的内容则保留在了a.txt.orig的文件中。
原创文章,作者:178babyhanggege,如若转载,请注明出处:http://www.178linux.com/30839