grep与正则表达式

 

   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字符串

 
egrep新增的元字符   (元字符是一个或一组代替个或多个字符的字符 例: *?[] re)
  1. +   匹配一个或多个加号前的字符 eg:‘[a-z]+ove'匹配一个或多个小写
         字母后跟ove的字符串 
  2. ?   匹配另个或一个前导字符,即它前面的那个字符可有可无
  3. a|b 匹配a或b  eg :’love|hate‘ 匹配love或hate
  4.() 字符组   eg:love(able|ly)匹配loveable或lovely

 练习:

写一个脚本:
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

你可能感兴趣的:(linux,正则表达式,职场,休闲)