1.grep
定义:根据用户指定的模式(pattern)对目标文本进行过滤,显示被模式匹配到的行
命令形式
grep [OPTIONS] PATTERN[FILE...]
常用参数
- -v 显示不被pattern匹配到的行
- -i 忽略字符大小写
- -n 显示匹配的行号
- -c 统计匹配的行数
- -o 仅显示匹配到的字符串
- -E 使用ERE,相当于egrep
例子
1.查找文件内容包含root的行数:grep -n root test.txt
2.查找文件内容不包含root的行:grep -nv root test.txt
3.查找后以s开头的行:grep ^s test.txt
4.查找以n结尾的行:grep n$ test.txt
2.sed
定义:sed是流编辑器,一次处理一行内容。
sed处理方式:
命令形式
sed [-hnV][-e<script>][-f<script文件>][文本文件]
- -h 显示帮助。
- -n 仅显示script处理后的结果。
- -e<script> 以选项中指定的script来处理输入的文本文件
- -f<script文件> 以选项中指定的script文件来处理输入的文本文件。
常用参数
- a:新增(指令行后面) sed -e ‘4 a newline‘
- c:取代 sed -e ‘2,5c No 2-5 number‘
- d:删除 sed -e ‘2,5d‘
- i:插入(指令行前面) sed -e ‘2i newline‘
- p:打印 sed -n ‘/root/p‘
- s:取代 sed -e ‘s/old/new/g‘
例子
1.查看帮助
- sed -h
- man sed
查看技巧:按“J”键向下翻页,按“K”键向上翻页;输入“/+查找内容”,按“n”查看下一条查询内容,按“N”查看上一条查询内容。
2.在第四行后添加新字符串:sed ‘4 a new line‘ test.txt
修改后不会改变原文件中的内容
3.在第二行后加上newline:sed ‘2a drink tea‘ test.txt
修改后不会改变原文件中的内容
4.在第二行前加上newline:sed ‘2i drink tes‘ test.txt
修改后不会改变原文件中的内容
5.全局替换:sed -e ‘s/root/hello/g‘ test.txt
修改后不会改变原文件中的内容,加“g”代表全局修改,否则只修改第一个
6.直接修改文件内容:sed -i ‘s/root/hello/g‘ test.txt
加“-i”就是直接修改原文件,此操作需谨慎
3.awk
定义:把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行后续处理。
awk处理方式:
命令形式
awk ‘pattern + action‘ [FILE]
- -pattern 正则表达式
- -action 对匹配到的内容执行的命令(默认为输出每行内容)
常用参数
- FILENAME awk浏览的文件名
- BEGIN 处理文本之前要执行的操作
- END 处理文本之后要执行的操作
- FS 设置输入域分隔符,等价于命令行-F选项
- NF 浏览记录的域的个数(列数)
- NR 已读的记录数(行数)
- OFS 输出域分隔符
- ORS 输出记录分隔符
- RS 控制记录分隔符
- $0 整条记录
- $1 表示当前行的第一个域......以此类推
例子
1.搜索/etc/passwd有root关键字的所有行,并显示对应的shell:awk -F : ‘/root/{print $7}‘ /etc/passwd
以“:”为分隔符“$7”是第7个域的值
2.打印/etc/passwd的第二行信息:awk -F:‘NR==2{print $0}‘ /etc/passwd
3.使用begin加入标题:awk ‘BEGIN {print "BEGIN", "BEGIN"}{print $1, $2}‘ /etc/passwd
awk -F : ‘BEGIN{print "BEGIN BEGIN"}{print $1,$2}‘ /etc/passwd
4.自定义分隔符:echo "111 222|333 444|555 666"|awk ‘BEGIN{RS="|"}{print $0}‘