Shell 查找与替换
1.文本查找 searching传统上,有3种程序可以用来查找整个文本文件。 1.简单的grep
使用-F选项查找固定字符串austen,事实上,只要匹配的模式里未含有正则表达式的meta字符,则grep默认行为模式就等同于使用了-F:
2.正则表达grep [options...] pattern-spec[files...]
用途 显示匹配一个或多个模式的文本行。时常会作为管道的第一步,以便对匹配的数据作进一步处理。
范例:
POSIX字符集:
在方括号表达式中,所有其他的meta字符都会失去其特殊含义。所以[*.]匹配于字面上的星号,反斜杠以及句点。要让]进入该集合,可以将它放在列表的最前面: 后向引用: 在文本文件里进行替换sed一般来说,执行文本替换的正确程序应该是 sed ——流编辑器(Stream Editor),sed的设计就是用来以批处理的方式而不是交互的方式来编辑文件。当你知道要做好几个变更,比较简单的方式是将这些变更部分写到一个编辑中的脚本里,再将此脚本应用到所有必须修改的文件。
cut语法
cut -c list[file ...]
cut -f list[-d lelim][file...]
用途
从输入文件中选择一或多个字段或者一组字符,配合管道(pipeline),可再做进一步处理。
主要选项:
-c list
以字符为主,执行cut操作。list为字符编号或一段范围的列表(以逗点隔开),如1,3,5-12,42
-d delim 通过-f选项,使用delim作为定界符,默认为tab
-f list 以字段为主,坐剪下的操作。list为字段编号或一段范围内的列表,以逗号隔开。
$ ls -l | cut -c 1-10
使用join连接字段语法 join [options ...] file1 file2
用途 以共同一个键值,将已存储文件内的记录加以结合。
选项:
-1 field1
-2 field2
-1 field1 是从file1中取出字段field1,-2 field2是从file2取出field2.字段编号自1开始,而非0.
-o file.field
输出file文件中的field字段。一般的字段则不打印。除非使用多个-o选项,即可显示多个输出字段。
-t separator:使用separator作为输入字段分隔字符,而非使用空白。此字符也为输出的字段分隔字符。
cat sales
#业务员数据
#业务员 量
joe 100
jane 200
herman 150
chris 300
cat quotas
#配额
#业务员 配额
joe 50
jane 75
herman 80
chris 95
# 为了让join得到正确结果,输入文件必须先完成排序。
merge-sales.sh
#!/bin/sh
# 删除注释并排序数据文件
sed '/^#/d' quotas | sort > quotas.sorted
sed '/^#/d' sales | sort > sales.sorted
#以第一个键值作结合,将结果产生至标准输出
join quotas.sorted sales.sorted
awkawk 'program' [file ...]
awk程序基本架构为:
pattern {action}
...|awk '{print some-stuff}'|...
例如:
awk '{print $1}' 打印第一个字段(未指定pattern)
awk '{print $2,$5}' 打印第2与第5个字段(未指定pattern)
awk '{print $1,$NF}'打印第一个与最后一个字段,未指定pattern
awk 'NF > 0 {print $0}'打印非空行,指定pattern与action,$0表示整条记录
awk 'NF>0' 同上
awk -F: '{print $1,$5}' /etc/passwd #处理/etc/passwd,以:作为分隔符
awk -F: '{print "User",$1,"is really",$5}' /etc/passwd
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |