grep:更适合单纯的查找或匹配文本
sed:更适合编辑文本
awk:更适合格式化文本,对文本进行较复杂格式处理
1、grep
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
grep --help
[options]主要参数:
-c:只输出匹配行的计数
-i:不区分大小写
-h:查询多文件时不显示文件名
-l:查询多文件时只输出包含匹配字符的文件名
-n:显示匹配行及行号
-s:不显示不存在或无匹配文本的错误信息
-v:显示不包含匹配文本的所有行
--color=auto:可以将找打的关键词部分加上颜色的显示
pattern正则表达式主要参数:
\:忽略正则表达式中特殊字符的原有含义
^:匹配正则表达式的开始行
$:匹配正则表达式的结束行
\<:从匹配正则表达式的行开始
\>:到匹配正则表达式的行结束
[]:单个字符,如[A]即A符合要求
[-]:范围,如[A-Z],即A、B、C一直到Z都符合要求
.:所有的单个字符
*:有字符,长度可以为0
grep命令使用简单实例
grep 'test' d* 显示所有以d开头的文件中包含test的行
grep 'test' aa bb cc 显示在aa、bb、cc 文件中匹配test的行
grep '[a-z]\{5\}' aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行
grep命令使用复杂实例
明确要求搜索子目录:grep -r
忽略子目录:grep -d skip
如果有很多输出时,可以通过管道将其转到'less'上阅读:
grep magic/usr/src/Linux/Documentation/* | less
2、sed
Linux sed 命令是利用脚本来处理文本文件
sed 可依照脚本的指令来处理、编辑文本文件
sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等
动作说明:
a:新增,a的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c:取代,c的后面可以接字串,这些字串可以取代n1,n2之间的行
d:删除,因为是删除,所以d后面通常不接任何咚咚
i:插入,i的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p:打印,将某个选择的数据印出。通常p会与参数sed -n一起运行
s:取代,可以直接进行取代工作,通常这个s的动作可以搭配正规表示法!例如,1,20s/old/new/g
注意:sed -e是修改输出终端,sed -i才是在源文件修改!!!
操作实例:
在testfile文件的第四行后添加一行,并将结果输出到标准输出,在命令行提示符下输出如下命令:
sed -e 4a\newLine testfile
首先vim testfile文件 输入内容:
在第二行前添加drink tea:
nl命令在linux系统中用来计算文件中行号
将第2-5行的内容取代成为No 2-5 number:
sed -s 替换
把 is 换成 are :
sed -d 删除
删除头三行:
删除包含nux的行:
删除所有空白行:
sed -n
显示2-4行:
3、awk
awk是一种处理文本文件的语言,是一个强大的文本分析工具。
基本用法
首先vim log.txt文件 输入内容:
用法一:
awk '{[pattern] action}' {filenames} #行匹配语句awk 只能用单引号
实例:
每行按空格或TAB分割,输出文本中的1、4项
从文件中找出长度大于8的行
用法二:
awk -F # -F 相当于内置变量FS,指定分割字符
实例:
使用","分割
使用多个分隔符。先使用空格分割,然后对分割结果在使用","分割
用法三:
awk -v # 设置变量
实例:
设置变量a,并赋值=1,打印第一列和第一列加变量a的值
设置两个变量a=1和b=2,并赋值打印第一列,第一列+a,第一列+b的值
用法四:
awk -f {awk 脚本} {文件名}
实例:
awk -f cal.awk log.txt 其中,cal.awk为awk脚本文件
练习:
过滤第一列大于2的行
过滤第一列等于2的行
使用正则,字符串匹配:
输出第二列包含‘th’,并打印第二列与第四列