awk、sed、grep是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。
◆名字来源于三个作者的名字简称 ◆适用于需要按列处理的数据,主要用于文本内容的分析处理,也常用于处理数据,生成报告
ifconfig | awk '{print 1,2,
cat /etc/shadow | awk -F: '{print $1}'
指定 :
为分隔字符来获取该文件的第1列的列值。
awk 'BEGIN{FS=":"}{print $1}' test.txt
内建变量,指定 :为分隔字符。
awk -F'[ :]' '{print $1}' test.txt
使用多个分割符,在[]内有一个空格和 : 字符,先使用空格作为分隔符,然后对分割结果再使用:进行分割。
awk -vb=3 '{print 1,b}' test.txt 设置变量,即可以任意给定变量的值,在选择要输出的列的值就可以设置为这个变量。
awk -vx=2 -vy=fl '{print 1,x,
awk -f fl.awk test.txt
使用文件中的awk参数来获取信息。
awk '$1>3' test.txt
列出第一列值大于3的行。
awk '$1==3' test.txt
显示第一列值等于3的行。
awk '$1==3 {print $1,$3}’ test.txt
显示第一列值等于3的所在行的第一列和第三列的值。
awk '$1>3 && $4=="aaaaaa" {print $1,$2,$3,$4}' test.txt
显示第一列大于3且第四列的列值等于“aaaaaa”的所在行的第1,2,3,4列的列值。
awk -F: 'BEGIN {print "---------fulin_test-----------"} {print $1}' test.txt
◆stream editor ◆根据定位到的数据行修改数据,主要用于文本内容的编辑,默认只处理模式空间,不改变原数据
sed -n '4p' test.txt
显示文件的第4行。
sed -n '3,6p' test.txt
显示文件的3至6行。
sed -n '/aaaa/'p test.txt
显示包含关键字的所有行。
sed -n '1,p' test.txt 显示整个文件,其中p代表最后一行。
sed -n '/\/'p test.txt 由于本身对sed代表一种含意(表示最后一行),而若需要过滤文档本身字符,要让字符失去意义就要将用表示字符本身.
sed -n '/.*fl/'p test.txt
使用正则表达式:’. ‘ ‘*’ ‘ .*fl’等。
sed '/fl/=' test.txt
使用模式/pattern/=显示文件所有内容及关键字所在行的行号。
sed -n '/fl/=' test.txt
在模式/pattern/=的基础上添加-n参数表示仅显示关键字所在行的行号。
sed -n -e'/aaaaaa/=' -e '/fl/=' -e'/abs/=' test.txt
-e参数能够支持多个模式/pattern/=。
sed -n -e'/ssaa/'p -e'/bkha/'p test.txt
-e参数也能够支持多个’/pattern/’p模式。
sed '2s/a/A/g' test.txt
将文件的第2行的所有 a 字符全部替换为A字符。(2s代表第二行、/a/A/匹配第2行的a字符并将a替换为A,g代表的是全局)。
但是这种关键字的替换并不会修改源文件
,仅是在命令执行后临时性的显示一次。
sed -i '4s/a/A/g' test.txt
-i 直接修改文件内容 ,替换修改会保存到源文件中。 4s指的是进行第四行替换, g代指的全局替换 将a替换成A。并保存文件。
sed -i.bak '4d' test.txt
删除源文件的第4行,并且备份一份未被修改的源文件‘.bak’。
ifconfig | sed -n '2p' |awk -F: '{print $2}'|awk '{print $1}'|awk -F. '{print $2}'|awk -F1 '{print $2}'|awk -F8 '{print $1}'
ifconfig | sed -n -e '1p' -e '10p' |awk '{print $1,"\t|\t"$5}'
ifconfig | sed -n -e'2p' -e'11p' | awk '{print $2}'|awk -F: '{print $2}'|grep -v '^$'
◆global regular expression print ◆基于正则表达式查找满足条件的行,主要用于文本内容查找,支持正则表达式
grep "fl" /etc/passwd
搜索关键字并打印出关键字所在的行。
grep -A 10 "fl" /etc/passwd
搜索关键字并打印出关键字所在的行以及关键字以下十行。
grep -B 10 "fl" /etc/passwd
搜索关键字并打印出关键字所在的行以及关键字以上十行。
grep -C 10 "fl" /etc/passwd
搜索关键字并打印出关键字所在的行以及关键字以上下十行。
grep "fl" /etc/passwd /etc/shadow /etc/group /etc/gshadow
作用:列出包含关键字的文件名
grep -l "fl" /etc/passwd test.txt a.txt /etc/shadow /etc/group /etc/gshadow
作用:列出关键字所在的行号及行的内容
grep -n "fl" /etc/passwd
作用:打印出不包含关键字所有的行
grep -v "defaults" /etc/fstab
作用:输出以某个关键字开头的所有行
grep "^UUID" /etc/fstab
作用:输出以某个关键字结尾的所有行
grep "bash$" /etc/passwd
过滤注释和空行: grep -v "#" test.txt |grep -v "^
作用:递归查找
grep -r -n "aaaaaa" .
能把一个目录中只要是包含关键字的所有文件及所在的行的行号都打印出来。
作用:忽略大小写
grep -r -i "aaaaaa" .
作用:多关键字查找
grep -e "aaaaa" -e "bbbb" test.txt
查看文件中生效的配置:grep -v -e "#" -e "^$" test.txt
作用:以指定的文件里面的匹配模式去搜索
grep -f tmp.txt /etc/passwd
作用:显示匹配关键字的行数
grep -c "aaaaa" test.txt
作用:锚定行首
grep ^fl /etc/passwd
作用:锚定行尾
grep bash$ /etc/passwd
作用:匹配为非换行符的任意字符
grep "f....l" test.txt
当.字符
位于两个指定指定的关键字的中间时,一个 . 字符
匹配为一个非换行符的任意字符。
grep "f." test.txt
当 .字符
位于末尾时则匹配为任意多个非换行符的字符。
作用:匹配零个或多个先前字符
grep "fu*" test.txt
列出匹配0个或多个关键字所在行。
作用:匹配一个指定范围内的字符
grep [ahb] test.txt
列出含有指定范围内的1个或多个关键字的所在行。
作用:匹配不在指定范围内的字符
grep [^fabc] test.txt
列出除了所有字符都是指定范围内的1个或多个关键字的所在行。
grep -v [0-9] test.txt
grep [0-9] test.txt
grep [a-zA-Z] test.txt
grep [a-z] test.txt
grep [A-Z] test.txt
作用:打印 \关键字
标记匹配字符
grep \aaaaa test.txt
列出含有关键字的所在行。(^锚定行的开始 $锚定行的结束)。
\<
作用:锚定单词开始行
grep "\<fl" test.txt
列出以关键字开头的字符串所在行。
\>
作用:锚定单词结束行
grep "fl\>" test.txt
列出以关键字结尾的字符串所在行。
x\{m\}
作用:重复连续字符x,m次数
grep "a\{4\}" test.txt
列出文件中存在4个及以上关键字a的所在行。
x\{m,n\}
作用:重复连续字符x,m-n次数
grep "a\{7,9\}" test.txt
列出文件中存在7个到9个连续关键字a的所在行。