首先介绍一下Linux里面鼎鼎有名且非常重要的三剑客命令。

grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具。

sed   功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大。

awk   是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。

(grep擅长查找,sed擅长修改文件,awk擅长取列)

grep命令

1  1.grep     过滤筛选信息
2 grep "信息"  文件路径
3 ll /|grep "^d"  查找以d开头的信息
4 grep —B 1 "信息"  文件路径
5 —B前一行  —A后一行  —C中心 -c统计 -n显示行数 1 行 (筛选该信息并看该信息上面或者下面的1行)
6 取反排除
7 grep -v    love      /opt/hello  
8 grep -v   "^#"       /etc/selinux/config  (不显示注释)
9 grep -v  不想看的信息   文件路径

sed命令

语法格式:sed  参数    ' 条件--处理方式 '  文件路径
批量修改文件扩展名 (把txt改成jpg)
ls oldboy*.txt|sed -r 's#(.*)txt#mv & \1jpg#g'|bash
改回去
rename .jpg .txt oldboy*.jpg
用sed命令取出IP地址
ip a s ens33|sed -rn '3s#^.*net (.*)/24.*#\1#gp'
删除修改内容自动备份
sed -i.bak 's#原有内容#修改后的内容#g' 文件路径
(一)sed命令的作用
1.擅长对行进行查找处理
2.擅长将文件的内容信息进行修改调整/删除
(二)sed命令的具体功能
1.文件中添加信息的能力  (增)
-i 真实编辑文件
在文件第一行添加:     
sed -i '1i添加的信息'  文件路径
在文件最后一行添加:  ($代表结尾)
sed -i '$a添加的信息'  文件路径
sed -i '$a添加的信息\n添加的信息' 文件路径
在hello后面用i添加hello.77,在love后面用a添加love.88:
sed -i -e '/hello/ihello.77' -e '/love/alove.8' 文件路径
2.文件中删除信息的能力  (删)
d 删除
删除单行信息:sed -i '3d' 文件路径
删除多行信息:sed -i '2,5d' 文件路径 
删除指定行:sed -i '3d;6d' 文件路径
删除空行和注释信息行:sed -i '/^#/d;/^$/d' 文件路径
3.文件中替换信息的能力  (改)
sed 's#原有内容#修改后的内容#g' 文件路径
如果修改的内容也有#号可以把修改的#换成/
sed -i '4c修改后的内容' 文件路径
修改第4行一整行内容
sed -i.bak 可以备份加后缀 
sed命令查询信息方法:
-n 取消默认输出
显示单行信息
sed -n '3p' 文件路径(显示第3行)
根据行号信息,输出多行内容 (连续)
sed -n '1,3p' 文件路径(显示1到3行)
根据行号信息,输出多行内容 (不连续)
sed -n '1p;3p' 文件路径
不显示空行
sed -n '/./p' ./hello.88.sh
根据文件内容的`行号`进行查询:
根据内容信息,输出多行内容(连续)(,输出内容经过的所有路径)
[root@hello /]# sed -n '/oldboy/,/Alex/p' 文件路径
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
106,oldboy,CEO
根据内容信息,输出多行内容(不连续)(;只输出指定的)
[root@hello /]# sed -n '/oldboy/p;/Alex/p' 文件路径
101,oldboy,CEO
103,Alex,COO
106,oldboy,CEO
根据文件内容的`信息`进行查询:
#根据内容信息,输出单行内容
[root@hello /]# sed -n '/oldboy/p' 文件路径
101,oldboy,CEO

awk命令

三,awk
awk 是一种很棒的语言,它适合文本处理和报表生成,其语法较为常见,借鉴了某些语言的一些精华,如 C 语言等。在 linux 系统日常处理工作中,发挥很重要的作用,掌握了 awk将会使你的工作变的高大上。awk 是三剑客的老大,利剑出鞘,必会不同凡响。

参数

-F fs or --field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
-v var=value or --asign var=value
赋值一个用户定义变量。
-f scripfile or --file scriptfile
从脚本文件中读取awk命令。
-mf nnn and -mr nnn
对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
-W compact or --compat, -W traditional or --traditional
在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
-W copyleft or --copyleft, -W copyright or --copyright
打印简短的版权信息。
-W help or --help, -W usage or --usage
打印全部awk选项和每个选项的简短说明。
-W lint or --lint
打印不能向传统unix平台移植的结构的警告。
-W lint-old or --lint-old
打印关于不能向传统unix平台移植的结构的警告。
-W posix
打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符和=不能代替和=;fflush无效。
-W re-interval or --re-inerval
允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
-W source program-text or --source program-text
使用program-text作为源代码,可与-f命令混用。
-W version or --version
打印bug报告信息的版本。

awk 的原理

通过一个简短的命令,我们来了解其工作原理。
awk ‘{print $0}’ /etc/passwd
echo hhh|awk ‘{print “hello,world”}’
awk ‘{ print “hiya” }’ /etc/passwd

通过第一个指令你将会见到/etc/passwd 文件的内容出现在眼前。现在,解释 awk 做了些什么。调用 awk时,我们指定/etc/passwd 作为输入文件。执行 awk 时,它依次对/etc/passwd 中的每一行执行 print 命令。所有输出都发送到 stdout,所得到的结果与执行 cat /etc/passwd 完全相同。现在,解释{ print }代码块。在 awk 中,花括号用于将几块代码组合到一起,这一点类似于 C 语言。在代码块中只有一条 print 命令。在 awk 中,如果只出现 print 命令,那么将打印当前行的全部内容