linux基础(8)-文件处理(awk 、sed、grep)

grep基本用法
格式:grep [选项] [模式] [文件]
 
选项:
-c:只显示有多少行匹配 ,而不具体显示匹配的行
-n:在每一行前面打印该行在文件中的行数
-i:在字符串比较的时候忽略大小写
-v:显示不包含匹配文本的所欲行
 
实例1
ls -l | grep -n "^d" #找到以d开头的内容
ls -l|grep -n "feigu" #找到以feigu开头的内容
 
 
 
awk基本用法
 格式
awk [-F field-separator] 'commands' inputfile
awk -F: 'commands' inputfile 
awk -f awk-scpript-file inputfile
 
实例1
ls -l|awk '{print $1,$2}' #打印出该文件第一列和第二列的内容。注意只能是单引号。awk默认使用空格分隔符,所以省略了-F。$1,$2...$n,这种方法称为域标记。
 
 
cat /etc/passwd|awk -F: '$1=="feigu" {print $0}' #第一列的值为feigu。$0表示使用所有域
cat /etc/passwd|awk -F: '$1=="games" {print $0}' #第一列的值为games 。$0表示使用所有域 。-F表示指定分隔符

 

 
cat baidu.log|wc -l  #统计baidu.log 文件的行数
 

sed基本用法
sed [选项] [定址commonds] [inputfile]
sed [选项] -f scriptfile inputfile
./scriptfile inputfile(命令脚本首行:#!/bin/sed -f)
 
选项:
-n 关闭默认输出,默认将自动打印所有行
-e 多点编辑,允许多个脚本指令被执行
-r 支持扩展正则+ ? () {} |
-f 支持使用脚本
-i 直接修改原文件,慎用
定址:
定址可以是0个,1个,2个。通知sed去处理文件的哪几行。
0个,处理文件所有行
1个,处理行号所在位置的行
2个,处理被行号或正则包起来的行
 
命令:
p        打印行
d        删除行
s         替换
a         之后添加一行append
i         当前行之前插入文本-instert
 
实例1
sed -n '1p' baidu.log #打印出文件第一行
sed -n '1,3p' baidu.log #打印出文件1-3行 ,注意是逗号分隔
 
sed "s/python/java/g" baidu.log #将文件中python字符串替换成java字符串
注释:s表示替换命令,/my/表示匹配my,/java/表示把匹配的替换成java,/g表示 替换所有的匹配
 
 
sed "s/^/#/g" baidu.log #在每一行最前面加#号
 
sed "s/$/----/g" baidu.log #在每一行最后加----
 
相关正则
 
1     ^ 表示一行的开头。如:/^#/ 以#开头的匹配
2     $ 表示一行的结尾。如:/}$/ 以}结尾的匹配。
3     \< 表示词首。 如 \<abc 表示以 abc 为首的詞。
4     \> 表示词尾。 如 abc\> 表示以 abc 結尾的詞。
5     . 表示任何单个字符。
6     * 表示某个字符出现了0次或多次。
7     [ ] 字符集合。 如:[abc]表示匹配a或b或c,还有[a-zA-Z]表示匹配所有的26个字符。如果其中有^表示反,如[^a]表示非a的字符

 

 
 
 
posted @ 2016-07-27 22:04  邬家栋  阅读(485)  评论(0编辑  收藏  举报