点我
操作系统三剑客
操作系统三剑客
操作系统三剑客命令-grep、sed、awk
grep
grep擅长查找功能
常用参数
参数 | 描述 |
---|---|
-n | 显示出 匹配行,原位置所在的行号 |
-a | 二进制以文本方式搜索数据 |
-c | 计算找到的搜索字符串总行数 |
-o | 仅显示出匹配到的内容,统计文件出现的次数 |
-i | 不区分大小写 |
-v | 反向选择 |
-E | 扩展的grep,即egrep |
-B num | 除显示匹配的一行之外,并显示该行之前的前num行 |
-A num | 除显示匹配的一行之外,并显示该行之后的num行 |
-C num | 除了显示匹配的一行之外,并显示该行前后的各num行 |
-w | 按照单词搜索,相等于-b |
-r | 递归查找目录下所包含的内容 |
示例
查看包含root的行:
# grep "root" /etc/passwd
查看不包含root的行:
# grep -v "root" /etc/passwd
列出以m开头和m结尾的行:
# grep "^m" /etc/passwd
# grep "m$" /etc/passwd
匹配非空行并显示出行号:
# grep -vn "^$" /etc/passwd
sed
字符流编辑工具(行编辑工具)==按照每行中的字符进行处理操作
sed在处理时一次只读取文件的一行,并对该行进行处理
sed将处理后的数据只会显示在屏幕上,并不会对原文件进行修改,所以说sed是一个行编辑器
在使用sed时最主要用到四个功能:增加、查询、删除、修改
sed命令的语法信息:
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
常用参数
参数 | 描述 |
---|---|
-n | 使用安静(silent)模式 |
-e | 直接在命令列模式上进行sed的动作编辑 |
-r | 扩展的正则表达式 |
-f | 直接将sed的动作写在一个文件内,例如:-f filename,则可以运行filename内的sed动作 |
-i | 直接编辑源文件,而不输出到屏幕中 |
-d | 删除 |
p | 查询,以行号为单位查询,例如:sed -n '3p' passwd.txt |
i | 在被指定到的行上面插入文本 |
a | 在被指定到的行下面插入文本 |
c | 取代被指定的某些行 |
s | 取代,内容取代,通常这个 s 的动作可以搭配正规表示式,例如 1,20s/old/new/g |
r 文件路径 | 在指定的位置插入另外一个文件的内容 |
w 文件路径 | 将符合条件的所有行保存至指定的文件中 |
= | 显示符合条件的所在行的行号 |
s@@@ | 查找条件也可以使用模式,但是被替换的内容不能使用模式 |
注意:在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来
示例:
查询:
-n:只对匹配的内容进行显示
p:将查询的内容显示出来
以行号为单位查询****
查询文档第3行:
# sed -n '3p' passwd.txt
查询文档第1-3行:
# sed -n '1,3p' passwd.txt
查询第一行与最后一行:
# sed -n '1p;$p' passwd.txt
查询文件中所有内容:
# sed -n '1,$p' passwd.txt
# cat -n passwd.txt | sed -n '1,3p;5,10p'
以指定内容查询:
只查询sshd相关的行:
# sed -n '/sshd/p' passwd.txt
查询以nologin结尾的行:
# sed -n '/nologin$/p' passwd.txt
查询从111行开始到abc行中间的行: //匹配第一个结果即停止
# sed -n '/111/,/abc/p' passwd.txt
查询只包含root和张三的行:
# sed -n '/root/p;/zhangsan/p' passwd.txt
查询时在文本中的所有行后都加入一行空行:
# sed 'G' passwd.txt
查询文本内容的空行再让每行内容再隔1空行显示:
# sed '/^$/d;G' passwd.txt //删除文本中的空行并将其他内容隔一行空行显示
查询时让每行内容再隔2行显示:
# sed '/^$/d;G;G' passwd.txt
在查询到的abc后面插入一行空行
# sed '/abc/G' passwd.txt
在匹配abc的前面插入一空行:
# sed '/abc/{x;p;x;}' passwd.txt
同时在前面后面插入一空行:
# sed '/abc/{x;p;x;G;}' passwd.txt
为每行内容加入行号:
# sed = passwd.txt | sed 'N;s/\n/ /' //末尾处有一个空格,表示行号后也有空格
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daaemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
为每行内容加入行号及.
# sed = passwd.txt | sed 'N;s/\n/\./'
1.root:x:0:0:root:/root:/bin/bash
2.bin:x:1:1:bin:/bin:/sbin/nologin
3.daaemon:x:2:2:daemon:/sbin:/sbin/nologin
4.adm:x:3:4:adm:/var/adm:/sbin/nologin
增加
行级增加内容******
以行号指定插入行内容
添加信息到第一行:
# sed '1i00,root,level9' passwd.txt 1表示在第几行操作,i表示在第几行的前面操作
在文件第三行之后添加信息:
# sed '3a00,root,level9' passwd.txt 3表示在第几行操作,a表示在第几行的后面操作
在文件末尾添加一行新内容
# sed '$aabc' passwd.txt
同时添加两行内容呢?
# sed '$auseradd zhangsan\nuseradd lisi' /etc/profile
以关键字插入行内容
在匹配行的下一行添加一行数字内容,/a表示在下一行添加内容:
# sed '/sshd/a123456' passwd.txt
在匹配行的上一行添加一行数字内容,/i表示在上一行添加内容:
# sed '/sshd/i123456' passwd.txt
在有zhangsan行的前面添加###### 后面添加######信息:
-e 同一行执行多条命令
# sed -e '/zhangsan/i######' -e '/zhangsan/a######' passwd.txt
在匹配内容中增加内容*****
在关键字为末尾的匹配行的末尾增加新内容/aaa:
# sed 's/nologin$/&\aa/g' passwd.txt //&表示匹配的关键字
以下命令和上面命令区别?
# sed 's/nologin/&\/aaa/' passwd.txt
在有包含root的行首加入字符aaa:
# sed '/root/s/^/&aaa/' passwd.txt
在有包含root的行尾加入字符.:
# sed -e '/root/s/$/&./' passwd.txt
在有包含root的行首加入字符aaa并在以bash结尾的行加入内容.:
# sed -e '/root/s/^/&aaa/' -e 's/bash$/&./' passwd.txt
# sed -e '/root/s/^/&aaa/;s/root$/&./' passwd.txt
替换:
行级替换*****
替换某一行数据:
从第1行到70行所有内容替换成一行???
# nl passwd.txt | sed '73c 73行数据有误!'
行范围替换:
# nl passwd.txt | sed '70,73c no 70-73!!!'
从指定行到文件末尾行包括末尾行进行替换:
# nl passwd.txt | sed '70,$c over!'
# nl passwd.txt | sed '71,73c 71新内容\n72新内容\n73新内容!'
指定内容进行替换******
将每行的第一个出现的root都替换成aaaa:
# sed s/root/aaaa/ passwd.txt
将每行的所有root都替换成aaaa:
# sed s/root/aaaa/g passwd.txt
将文档中1个0及以上都改成1个0
# sed s/0+/0/g passwd.txt
关闭selinux,使用-i表示直接修改配置文件:
查询SELINUX行中将enforcing内容替换成disabled
# sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config
排除SELINUX行将其他行中enforcing内容替换成disabled
# sed -i '/SELINUX/!s/enforcing/disabled/g' /etc/selinux/config
删除:
以行为单位删除******
删除第8行再显示文本内容:
# sed 8d passwd.txt
删除1-3行:
# sed '1,3d' passwd.txt
从文本开始处一直删除到第一个空行为止,第一个空行也会被删除:
# sed 1,/^$/d passwd.txt
删除文本中的空行:
# sed '/^$/d' passwd.txt
删除文本中包含sshd的行:
# sed '/sshd/d' passwd.txt
从第一行开始,删除偶数行:
# sed 'n;d' passwd.txt
从第一行开始,每隔两行删除一行:
# sed 'n;n;d' passwd.txt
删除每行行前行后的所有空格:
# sed 's/^[ \t]*//; s/[ \t]*$//' passwd.txt
删除匹配行至最后一行:
# sed '/sshd/,$d' passwd.txt
删除最后一行:
# sed '$d' passwd.txt
删除文档中所有包含sshd的关键字,行中其他数据保留:
# sed s/sshd//g passwd.txt
删除文件passwd最后六行,修改文件内容的方式,需要的话,先将文件备份:
# for((i=1;i<7;i++)); do sed -i '$d' passwd.txt ; done
awk
awk 主要切片列内容
awk基本原理是逐行处理文件中的数据,查找与命令行中所给定内容想匹配的模式,如果发现匹配内容,则进行下一个编程步骤,如果找不到匹配内容继续处理下一行。
常用参数
参数 | 描述 | ||
---|---|---|---|
FS | 指定字段分隔符,默认空格 | ||
NF | 当前处理行的最后一列 | ||
OFS | 输出分隔符 | ||
NR | 当前处理行的行号 | ||
$0 | 当前处理行的整行内容 | ||
$n | 当前处理行的第n个字段 | ||
'' | 为了和shell命令区分 | ||
{} | 表示一个命令分组 | ||
pattern | 过滤器,匹配pattern条件的行才进行action处理。【action是处理动作,常见的动作为print】 | ||
gsub(r,s) | 在$0中用s代替r | ||
index(s,t) | 返回s中的 t的第一个位置 | ||
length(s) | s的长度 | ||
match(s,r) | s是否匹配r | ||
split(s,a,fs) | 在fs上将s分成序列a | ||
substr(s,p) | 返回s从p开始的子串 | ||
++ -- | 增加与减少 | ||
^ ** | 指数 | ||
+ - * / % | 加减乘除取余 | ||
< <= == != > >= | 数值比较 | ||
&& \ | \ | 逻辑与逻辑或 | |
= += -= = /= %= ^= *= | 赋值 |
示例
列出文件所有内容:
# awk '{print $0}' netstat.txt
列出以tcp开头的行:
# awk '/^tcp/ {print}' netstat.txt
列出以udp结尾的行:
# awk '/udp$/ {print}' netstat.txt
默认以空格为分隔符,列出第一、第四列数据:
# awk '{print $1,$4}' netstat.txt
列出第一列内容,默认以空格为分隔符:
# df -TH | awk '{print $1}'
列出第一列内容,以:为分隔符:
# awk -F: '{print $1}' passwd.txt
行显示
查询第3-5行内容:
# awk 'NR==3,NR==5 {print}' passwd.txt
以:为分隔符查询第3-5行的第一列与最后一列:
# awk -F: 'NR==3,NR==5 {print $1,$NF}' passwd.txt
将行中字符串数量大于20的行的行号显示出来:
# awk 'length($0)>20 {print NR}' passwd.txt
前五行的第一列:
# head -5 passwd.txt | awk -F: '{print $1}'
查询网卡信息后截取网卡IP地址并加上备注显示:
# ifconfig ens32 | grep "inet" | head -1 | awk '{print "ip地址是:" $2}'
ip地址是:192.168.1.10
以:为分隔符格式化输出第一列、第二列及最后一列:
printf为格式化查询,-12 -6 -10 分别为每列占用多少个空格
# awk -F: '{printf "% -12s % -6s % -10s\n",$1,$2,$NF}' /etc/passwd
root x /bin/bash
bin x /sbin/nologin
daemon x /sbin/nologin
adm x /sbin/nologin
lp x /sbin/nologin
sync x /bin/sync
shutdown x /sbin/shutdown
halt x /sbin/halt
分类:
Linux
版权申明
本文系作者 @小白学安全 原创发布在 xbxaq.com 站点,未经许可,禁止转载!
评论