grep
grep [OPTION]... PATTERN [FILE]
-r 递归目录
-n 显示行号
-i 忽略大小写
-B, --before-context=NUM print NUM lines of leading context
-A, --after-context=NUM print NUM lines of trailing context
-C, --context=NUM print NUM lines of output context
匹配字符:
. 匹配任意字符
--exclude-dir=.git 排除目录,多个目录--exclude-dir={.git,res,bin}
sed
1、匹配某行然后替换某个字符:
不用grep怎么实现呢?
2、替换某行:3s,只替换第三行,sed -i "3s/#exit/exit/g" $factest,避免在脚本中把自己替换。
3、增加某行:3i,只增加第三行,原第三行向下移动,sed -i "3i exit" test.txt, 插入特殊字符需要转义,比如",$,{},(),|,转义符\需要4个\\\\,且需要前面有字符才能成功这是为何?
awk
awk [POSIX or GNU style options] [--] 'program' file ...
awk [options] 'Parttern{Action}' file
Action指动作,常用的print和printf,作用是格式化完成后进行文本输出。
awk逐行处理,遇回车换行,没有指定分隔符按照默认的空格进行分隔
$0 表示每一行的整行
awk 'END{print}' 最后一行
$1 表示第一列,$1---n分别表示第n列
$NF 表示最后一列,倒数第二列$(NF-1),NF表示被分隔开后共有几个字段,多个列输出使用逗号隔开后输入会用空格隔开,如果Action中使用空格隔开那么输出之间没有空格隔开
增加自己的字符拼接,逗号输出隔开,空格不隔开
Parttern模式
两种特殊模式:BEGIN 在文本处理之前进行的操作,END 在文本处理之后进行的操作
分隔符发
输入分隔符,默认是按照空格进行分隔,没有空格时可以设置特定的分隔符,-F指定输入分隔符
使用内置变量FS,-v设置变量的值
输出分隔符,默认是空格,可以指定分隔符,-v OFS='xx'
内置变量
NR显示行号,NR==1输出第一行
小数运算
a=0.114;b=1.852;awk 'BEGIN{print "'$a'" * "'$b'"}'
0.211128
a=0.114;b=1.852;echo "$a $b" | awk '{printf("%.2f",$1*$2)}'
0.21
保留小数点几位,会有四舍五入的操作需注意,比如0.573设置%.0f会变成1.000