命令: sed [options] 流编辑器,对文件增删改查换, 三剑客老二
注意 sed “s#正则##g” : 第一个位置正则
sed 后向引用, sed -n ‘s#()()#/1/2#g’
参数:
-n: 取消默认输出
-i: 原地修改 edit files in place
-i.bak -i参数后加.bak后缀名可以备份被修改的文件
-e: 多项编辑
-r: –regexp-extended
use extended regular expressions in the script.
功能:
p: (print)打印
e.g. sed -n ‘20,30’p ett.log 打印ett.log 中20-30行内容
e.g. sed -n ‘$’p ett.log 打印ett.log 中最后一行内容,$是文件结尾
s: 替换
g: global
组合: sed ‘s#{old}#{new}#g’ file
注意:输出的内容已经更改,但是文件本身内容没有更改
y:替换,相当于tr
q:quit 退出 例: sed ’10q’ /etc/passwd 处理到第10行退出
sed 过滤方法:
面试题: 把AFolder 下的所有 *b*.sh 的文件内容中 ‘xxxxx’ 换成’yyyyy’.
方法1: find AFolder -type f -name ‘ *b*.sh ‘ | xargs sed -i ‘s#xxxxx#yyyyy#g’
方法2: sed -i ‘s#xxxxx#yyyyy#g’ `find AFolder -type f -name ‘*b*.sh’ `
命令: awk [options] 过滤输出内容, 三剑客老大
参数:
e.g.
[[email protected] log]# awk ‘NR>19&&NR<31’ ett.log
解释:NR 是行号
-F 指定分隔符
awk match 方法
命令: grep [options] 三剑客老三
参数:
-A:除了显示匹配的一行之外,并显示该行之后的num行(after)
-B:除了显示匹配的一行之外,并显示该行之前的num行(before)
-C:除了显示匹配的一行之外,并显示之前和之后的num行
-x, –line-regexp 精确匹配
Select only those matches that exactly match the whole
line
e.g. grep -x 11 -A 10 ett.log
解释: ett.log中有1000行, 如果没有-x参数 ,则匹配 11,111,211,311,411 等等 之后的10行.
而有-x参数,只精确匹配”11″(-x 之后的字符串) 所以结果只有从11开始后跟10行数据
-v: 排除 -invert-match
排除不需要的内容
-i : 不区分大小写
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/1957.html