grep: 全面搜索正则表达式并显示
grep(最常用), egrep (prep -E = egrep) (扩展grep), fgrep
用法:grep [options] 'PATTERN(模式)'或"" file...
参数:
-i 不区别大小写
-v 跟默认的动作正好相反
-n 显示匹配的行在文中所处的位置
-A n(数字) 显示后几行
-B n 前几行
-C n 前后几行
--color 高亮显示匹配字符串
模式:: 由正则表达式组成
^ 脱字符 行首定位符
$ 行尾匹配符 加在字符串后
. 匹配任意单个字符
* 次数匹配 前字符可出现0次或任意次 ? 0或1次
[] 匹配一组字符中任意一个
\ 转意原字符
\< 词首定位符
\> 词尾定位符 字符串后
x\{m,n\)x最少m,最多n {m\}-x精确n次
{m,\}至少一次
\(...\)匹配稍后将要使用的字符的标签
例: \(love\)able\1able 匹配的是loveableloveable字符串
练习:
写一个脚本:
1、设定变量FILE的值为/etc/passwd
2、依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么,形如: (提示:LINES=`wc -l /etc/passwd | cut -d" " -f1`)
Hello, root,your UID is 0.
3、统计一共有多少个用户
#!/bin/bash
#
LFS=$'\n'
let A=0
for LINE in `cat /etc/passwd`; do
USERNAME=`echo $LINE | cut -d: -f1 `
ID=`echo $LINE | cut -d: -f3 `
echo "hello, $USERNAME ID $ID"
A=$[$A+1]
done
echo "$A users"
unset LFS SUM LINE USERNAME ID
写一个脚本:
1、添加10个用户user1到user10,但要求只有用户不存在的情况下才能添加;
#!/bin/bash
#
for I in {1..10}; do
grep "^user$I" /etc/passwd &> /dev/null && echo "user$I has been added" || useradd user$I
Done
写一个脚本:
1、通过ping命令测试192.168.0.151到192.168.0.254之间的所有主机是否在线,
如果在线,就显示"ip is up."
如果不在线,就显示"ip is down."
#!/bin/bash
#
NET="192.168.1"
for I in {100..124}; do
ping -c1 -W1 $NET.$I &> /dev/null && echo "$NET.$I is up." || echo "$NET.$I is down."
done
unset NET
练习:
1、显示/proc/meminfo文件中以不区分大小的s开头的行;
2、显示/etc/passwd中以nologin结尾的行;
3、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意字符的行;
4、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;
5、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;
6、显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;
7、ifconfig命令可以显示当前主机的IP地址相关的信息等,如果使用grep等文本处理命令取出本机的各IP地址,要求不包括127.0.0.1;
8、显示/etc/sysconfig/network-scripts/ifcfg-eth0文件中的包含了类似IP地址点分十进制数字格式的行;
1 grep -i --color "^s" /proc/meminfo
2 grep --color "nologin$" /etc/passwd
3 grep --color "^#.*" /etc/inittab
4 grep ":[0-9]:" /etc/inittab
5 grep ^[[:space:]]\{1,\}.*" /boot/grub/grub.conf
grep -E --color "^[[:space:]]{1,}.*" /boot/grub/grub.conf
6 grep "^\([0-9]\).*\1$" /etc/inittab
7 ifcofig | grep "inet addr" | grep -v '127.0.0.1' | cut -d: -f2 | cut -d "" f1
8 grep "[0-9]\{1,3\}\."\{3\}\.[0-9]\{1,3\} /etc/sysconfig/network-scripts/ifcfg-eth0
grep -E "([0-9]{1,3}\.){3}\.[0-9]{1,3}" /etc/sysconfig/network-scripts/ifcfg-eth0
文本处理命令::
cut:-d 指定分隔符
-f 取第几行 -f1,7 取1,7 -f1-7,1至7
例:tail -1 /etc/passwd | cut -d:(分隔符) -f1(第几段)
wc -l /etx/passwd | cut -d" " -f1