1200 字
6 分钟
Linux 三剑客(grep/sed/awk)
Linux文本三剑客
1 grep
演示文本:/etc/passwd以行为输出,只做筛选并输出,不会改变文件原来的内容
grep命令是我们常用的一个强大的文本搜索命令。命令格式:grep [参数] [关键字] <文件名>注意:可以通过 grep --help 查看grep的帮助信息参数详解:c 只输出匹配关键字的计数n 显示匹配行内容及行号v 显示不包含匹配文本的所有行o 只列出所匹配关键字
grep -v "^#" /etc/sudoers | grep -v "^$" //筛选以#开头和空行以外的内容grep -v "^#\|^$" /etc/sudoers
^ 以...开头 $ 以...结尾 ^$ 空行 \ 转义符2 sed
演示文本:hello sed1 sed1 sed1hello sed2 sed2 sed2hello sed3 sed3 sed3hello sed4 sed4 sed4hello sed5 sed5 sed5hello sed6 sed6 sed6hello sed7 sed7 sed7hello sed8 sed8 sed8行文本编辑工具sed 行文件编辑工具。因为它编辑文件是以行为单位的。命令格式:sed [参数] '<匹配条件> [动作]' [文件名]注意:可以通过 sed --help 查看帮助信息参数详解:参数为空 表示sed的操作效果,实际上不对文件进行编辑-n 取消静默输出-i 表示对文件进行编辑
匹配条件:匹配条件分为两种:数字行号或者关键字匹配关键字匹配格式:‘/关键字/’动作详解:a 在匹配到的内容下一行增加内容i 在匹配到的内容当前行增加内容d 删除匹配到的内容s 替换匹配到的内容p 查看指定内容e 多点编辑查看
sed -n '3p' sed //查看第三行的内容sed -n '3p;5p' sed //查看第三行和第五行的内容sed -n '2,5p' sed //查看2-5行的内容替换
sed -i '1s/sed/SED/' sed //将第一行第一个sed替换为SEDsed -i '1s/sed/SED/2' sed //将第一行第二个sed替换为SEDsed -i '3s/sed/SED/g' sed //将第三行所有sed替换为SEDsed -i 's/sed/SED/' sed //将每一行首个sed替换为SEDsed -i '6,8s/sed/SED/g' sed //将6-8行所有sed替换为SEDsed -i '2s/sed/SED/g;5s/sed/SED/g' sed //将第2和5行所有sed替换为SED增加
1.在第2行后增加add-1sed -i '2a\add-1' sed2.在第2行前增加insert-1sed -i '2i\insert-1' sed3.在第5-7行后每一行增加add-2sed -i '5,7a\add-2' sed4.在第5-7行前增加insert-2sed -i '5,7i\insert-2' sed5.在第1行后连续增加两行sed -i '1a\add-11\nadd-11' sed删除
删除第2行sed -i '2d' sed删除第2-5行sed -i '2,5d' sed删除第2和5行sed -i '2d;5d' sed3 awk
演示文本:hello awk1 awk2 awk3hello awk4 awk5 awk6Hello awk7 awk8 awk9不仅能以行为单位,也能以列为单位处理文件awk是一个功能非常强大的文档编辑工具,它不仅能以行为单位还能以列为单位处理文件。命令格式awk [参数] '[动作]' [文件名]
常见参数:-F 指定列的分隔符-f 调用脚本-v 定义变量
常见动作:print 显示内容$0 显示当前行所有内容$n 显示当前行的第n列内容
动作组成BEGIN{ 命令 } 初始代码块,主要和变量相关/pattern/{ 命令 } 匹配、执行代码块END{ 命令 } 结束代码块,主要和信息输出相关
内置变量FILENAME 当前输入文件的文件名,该变量是只读的NR 指定显示行的行号NF 输出当前行的列数OFS 输出格式的列分隔符,缺省是空格FS 输入文件的列分融符,缺省是连续的空格和Tabawk '/hello/' awk //筛选有hello的内容awk '{print $2}' awk //打印第2列内容 默认情况下awk会以空格作为分隔符awk '{print NR,$2}' awk //打印第二列的内容并显示行号awk 'NR==2{print $2,$4}' awk //打印第二行的内容的第二列和第四列的内容
awk -F ',' '{print $3}' awk //以,为分隔符,打印第三列的内容awk -F ',' 'BEGIN{OFS=":"}{print NR,$2}' awk //以,为分隔符,打印 行号:第二列的内容
ll | awk '{if ($5>=1910) print "\n" "filename:" $9 "\n" "lenth:" $5 "B" "\n"}' //输出当前目录下文件大小大于1910的文件名和文件大小
ll | awk '{if ($5>=1910 && /^-/) print "\n" "filename:" $9 "\n" "lenth:" $5 "B" "\n"}' //输出当前目录下普通文件大小大于1910的文件名和文件大小
awk -F ',' '{for(i=1;i<=NF;i++) print $i}' awk //按顺序输出所有内容awk -F ',' '{for(i=NF;i>=1;i--) print $i}' awk //按倒序输出所有内容1.查询系统中UID为0的用户awk -F ':' '$3==0{print $1}' /etc/passwd2.查询空密码的用户awk -F ':' '$2==""{print $1}' /etc/shadowawk -F ':' 'length($2)==0{print $1}' /etc/shadow Linux 三剑客(grep/sed/awk)
https://wangyi187.top/posts/os-13-linux-three-swords/
闽公网安备 35050402880173号