Linux-命令-sed-awk-grep

命令: sed [options] 流编辑器,对文件增删改查换, 三剑客老二

注意 sed "s#正则##g"    : 第一个位置正则

sed 后向引用, sed -n 's#()()#12#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. 

 [root@ark 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://www.cnblogs.com/mirrorlake/p/7339873.html