您的位置:首页 > 运维架构 > Linux

grep、sed、awk和正则表达式

2017-12-26 11:50 1076 查看

grep

SYNOPSIS
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
常用选项
-a 不忽略二进制数据。
-A 显示改行和改行后的内容
-B 显示改行和改行前的内容
-C 显示该行和改行前后的内容
-R/-r 递归,匹配目录
-d <action> 对指定目录进行相应的操作,read:读取目录下所有文件,resource 同 -r递归。
-i 忽略大小写
-w 只显示全字符匹配的列,用于匹配单词。
-v 反选。

举个栗子

grep -a 'root' /etc/passwd #在文件中匹配root,不忽略二进制数据
grep -A  2 'root' /etc/passwd # 在文件中匹配root,并显示改行的下面两行
grep -B  2 'root' /etc/passwd # 在文件中匹配root,并显示改行的上面两行
grep -C  2 'root' /etc/passwd # 在文件中匹配root,并显示改行的上下各两行,共五行
grep -R 'hello world' /tmp # 在/tmp目录下所有文件中匹配'hello world',不指定目录就是在/目录下匹配,那速度杠杠的
grep -w 'bin' /etc/passwd #在/etc/passwd文件中匹配bin单词,不会匹配到sbin
grep -v '^$' /etc/profile | grep -v '^#' #匹配除#开头和空白行外的所有行

sed

太多了,参考文档:sed命令详解
SYNOPSIS
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
常用选项
-e <script> 使用指定的脚本(命令)来匹配
-f <script-file> 使用指定的脚本文件(文件)来匹配
-n 静默模式,仅显示处理后的结果
-i 编辑模式(会直接修改文件,如果提供或者则会备份原文件)

栗子

sed -e 's/TEST/test/' -e '/hello/a\rance' test
#将第一个TEST替换成test,在hello后面加上rance(不会修改原文件)

sed -n -e 's/TEST/test/' -e '/hello/a\rance' test #只显示处理了的行

sed -i.bak -e 's/TEST/test/' test #将文件中的第一个TEST修改为test,并将原文件加.bak进行备份





修改为 <value>centos:2181,master:2181,client:2181</value>
语句:
sed -e '$a\ ' hosts|sed -e ':a;N;$!ba;s/\n/:2181,/g'|sed -e 's#, $#</value>#' -e'1i\<value>'|sed ':a;N;$!ba;s/\n//'
代码解释:先'$a\ '在最后添加一个空白行, ':a;N;$!ba;s/\n/:2181,/g'将所有的换行符替换为:2181, 's#, $#</value>#' 将会后一行的结束符替换为</value>,'1i\<value>'在第一行添加<value>,':a;N;$!ba;s/\n//'将换行符删掉
在test文件aaa所在行下添加一行内容
sed -i '/.*aaa.*/{s#$#\n新的内容#}' test
sed表达式中使用变量(注意\转译符的使用)
test=12345
echo 'asdf'|sed -e "\$a${test}"

awk

参考文档:awk命令详解
SYNOPSIS
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
常用选项
-F 指定分隔符
-v 赋值一个变量,将外部参数传递给awk
-f 指定脚本文件处理awk命令

栗子

awk -F '[:/]' '{print $10}' /etc/passwd

将换行符替换为:
下面两种方法都可以
sed ':a;N;$!ba;s/\n/:/g' hosts
tr "\n" " " <hosts >hosts2 #"这种输出结果的最后也没有换行符"



awk 想用好很复杂,详情请看awk命令详解

正则表达式

先看看极客这张图



正则表达式功能强大,但是非常复杂,非特殊情况会用即可。

参考:正则表达式参考1
正则表达式参考2



参考:

sed命令详解
awk命令详解
正则表达式参考1
正则表达式参考2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息