'' 不识别特殊字符
"" 识别特殊字符
`` 非常识别
ifconfig ens33 |grep netmask
netstat -nt |grep tcp
last |grep root
grep
grep -v 显示不被模式匹配到的行
grep -v ^$ file 非空行
grep -v ^[[:space:]]$ file 去除空白行
grep -v ^[[:space:]]*$ file
grep -v "^$" /etc/profile |grep "^#"
grep -v "/bin/bash$" /etc/psswd
grep -n 显示匹配的行号
grep -n ^$ file 空行行号
grep -c 统计匹配的行数
grep -o 仅显示匹配到的字符串
grep -i 忽略字符大小写
grep -i ^s /proc/meminfo
grep -q 静默模式,不输出任何信息
echo $?:0 找到 用在生产中只关心找到or找不到
echo $?:1 找不到
grep -A# 后几行
grep -B# 前几行
grep -C# 前后各几行
grep -e 多选项之间逻辑关系
grep -w 匹配整个单词
grep -E = egrep
grep -F = fgrep
grep root /etc/passwd |grep bash 包含root和bash
grep -e root -e wang /etc/passwd 或者包含root,或者包含wang
字符匹配
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字(a-zA-Z0-9)
[:alpha:] 大写、小写
[:lower:] [:upper:] 小写 大写
[:bank:] 空白字符
[:space:] 空白字符(范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃)
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
[:digit:] 10进制数字
[:xdigit:] 16进制数字
匹配次数
* 匹配前面字符任意次(含0次),尽可能长的匹配
.* 任意长度的任意字符 目标的前、中、后
\? or ? 0/1次
\+ or + 至少1次
\{n\} or {n} n次
\{m,n\} or {m,n} m次到n次
\{,n\} ≦n次
\{n,\} ≧n次
\ 转义符
位置锚定
^ 行首
$ 行尾
^pattern$ 匹配整行
^$ 空行
^[[:space:]]$ 空白行
\< or \b 词首
\> or \b 词尾
\<pattern\> 整个单词
分组
\(\) 将一个或者多个字符捆绑在一起,当做一个整体进行处理 \1 \2 \3
\(string1\+\(string2\)*\)
\1 string1\+\(string2\)*
\2 string2
后项引用 引用前面分组括号中的模式所匹配字符,而非模式本身
a\|b or a|b a或b
\(c\|m\)at or (c|m)at cat或mat
练习
grep "^rpc\>" /etc/passwd |cut -d: -f1,7
grep -o "\<[0-9]\{2,3\}\>" /etc/passwd
grep "^[[:space:]]\+[^[:space:]]\{1,\}" /etc/grub2.cfg
netstat -tan |egrep -o "\<LISTEN>\[[:space:]]+$"
grep "\<nologin\>" /etc/passwd |cut -d: -f1,3 不知道是否正确
cut -d ":" -f1,3 /etc/passwd |egrep "\b[[:digit:]]{1,3}\b"
echo bash testbash basher sh nologin |xargs -n1 useradd
chsh -s /sbin/nologin nologin
egrep "(^.*)\>.*/\1$" /etc/passwd
cut -d: -f1,7 /etc/passwd |grep "^\([[:alpha:]]\+\>\).*/\1$"
df |egrep -o "[0-9]{1,3}%" |sort -nr 不知道是否正确
df|grep "^/dev/sd" |tr -s " " % |cut -d% -f5 |sort -nr
df|grep "^/dev/sd" |egrep -o "\<[[:digit:]]+%" |tr -d % |sort -nr
egrep "^(mage|root|wang)\>" /etc/passwd |cut -d: -f3,7
egrep -o '^.*\>\(\)' /etc/rc.d/init.d/functions
egrep -o '^[[:alnum:]_]+\(\)' /etc/rc.d/init.d/functions
basename file
dirname file
echo /etc/rc.d/init.d/functions |grep -Eo "[^/]+$" or "[[:alnum:]]+$"
echo /etc/rc.d/init.d/ |grep -Eo "[^/]+/?$" or "[[:alnum:]]+/?$"
echo /etc/rc.d/init.d/functions |egrep -o "([[:alnum:].]*/)+"
last |tr -s " " |cut -d " " -f1,3 |egrep "root.*[[:digit:]]\.+" |sort |uniq -c
echo {0..1000} |egrep -o "\<[0-9]\>"
echo {0..1000} |egrep -o "\<[1-9][0-9]\>"
echo {0..1000} |egrep -o "\<1[1-9][0-9]\>"
echo {0..1000} |egrep -o "\<2[0-4][0-9]\>"
echo {0..1000} |egrep -o "\<25[0-5]\>"
IP地址过滤(特殊IP也被过滤)
egrep -o (([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>
ifconfig |grep "inet\" |tr -s " " |cut -d " " -f3
每个字母出现的次数和字母本身
echo "welcome to lol linux" |grep -o '.' |sort |uniq -c |sort -nr
nmap
没有关键字的搜索
黑客——开机机器、关机机器、机器服务——>IP、版本
rpm -ivh /misc/cd/Packages/nmap-6...
nmap -v -sP 172.17.252.0/24 扫描此网段开机的机器(up/down)
提取开机的IP地址
nmap -v -sP 172.17.252.0/24 |grep -B1 "Host is up" |grep for |cut -d " " -f5 > ip.log
wc -l ip.log
扫描主机的服务
nmap -v -A 172.17.0.1