Linux文本处理3大利器sed grep awk
一、grep(Globel search Regular Expression and Print out the line)
grep格式:grep [选项] [模式] [文件...]
-A n:表示显示该行及其后n行
-B n:表示显示该行及其前n行
-C n:表示显示该行及其前后各n行
--color 匹配的项用不同颜色显示
匹配的目标字符串中包含元字符,需要利用转移符"\"屏蔽其意义,如grep "com\.con" *,句号"."字符是元字符
或字符"|"是扩展正则表达式中定义的,grep需要加上-E选项才能支持它,不带-E选项,会将"|"字符解析为字面意义
元字符:
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
字符集:[:digit:]数字,[:lower:]小写字母,[:upper:]大写字母,[:punct:]标点符号,[:space:]空白字符,[:alpha:]所有字母,[:alnum:]所有字母和数字
*:匹配其前面的字符任意次
\{m,n\}:匹配其前面的字符至少m次,至多n次
"^"表示行首,^$表空白行,[^$]表示空白行的范围,前面加上"^"符号取反^[^$]表示非空白行
\(\) \1匹配第一个括号内容
\<\>符号用于精确匹配,grep "\<the\>" file,精确匹配the这个单词。grep命令的-w选项也可用于精确匹配
模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2,可用在shell脚本中判断
或字符"|"是扩展正则表达式egrep中定义的,grep需要加上-E选项才能支持它 egrep; grep -F 使用字面值 fgrep。
二、sed
sed [选项] 'sed命令' 输入文件
选项:
-n:静默模式,不再显示模式空间中的内容
-i:直接修改原文件
-e SCRIPT -e SCRIPT:添加脚本到将要执行的命令中,可以同时执行多个脚本
-f /PATH/TO/SED_SCORIPT:添加脚本文件中的内容到将要执行的命令中 (#!/bin/sed -f)
#sed -f /path/to/script file
-r:表示使用扩展正则表达式
命令:
sed -n '1,+2p' file 从第1行开始往后2行
s/pattern/string/g/i g/i修饰符 全局/忽略大小写 &:引用模式匹配到的整个串
命令组:
sed -n -e '/pattern/p' -e '/pattern/=' input
sed -n '/pattern/{p;=}' input
sed -n '/pattern/p;/pattern/=' input
三、awk
awk [options] 'PATTERN { action }' file1, file2, ... awk '/^$/{print
"This is blank."}' input
awk
[options] 'script' file1, file2, ... (#!/bin/awk -f)
print
item1, item2, ...
printf("%fmt \t%s",$1,$3) awk 'BEGIN {FS=",";print "Name\t\tPhoneNumber"} {printf("%-10.3f\t%s\n", $1, $3)}' file
关系和布尔表达式
连接多个条件 || && !
系统变量
内置字符串函数
awk脚本传递参数
awk 'BEGIN {FS=","} {print NR, $0}'OFS="." n=1 file 命令行参数不能被BEGIN字段语句访问
条件语句和循环语句
if (条件表达式)
动作1
else
动作2
while(条件表达式)
动作
do
动作
while(条件表达式)
for(设置计数器初值;测试计数器;计数器变化)
动作
array[index]=value
数组的索引可以是字符串也可以是数字
awk
'BEGIN{data[10.15]="1200"; if ("10.15" in data) print "found element."} ' 找不到
awk定义了一种for循环用来访问关联数组,语法如下:
for (variable in array)
do something with array[variable]
http://lq2419.blog.51cto.com/1365130/1238880
http://blog.****.net/taiyang1987912/article/details/39187525