linux下的文本处理工具
文本搜索工具:grep,egrep,fgrep
文件名通配:
*,?,[],[^]
限定了长度,又限定了可用的字符范围
[root@localhost ~]# alias grep=‘grep --color=auto‘
grep命令:
[root@localhost ~]# grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]#
强引用和弱引用的区分‘’ ,“”
当在使用变量引用是应使用弱引用(双冒号),来引用变量的替换,如果使用强引用则会直接引用单冒号‘’之中的字符而非变量替换
[root@localhost ~]# user=root
[root@localhost ~]# grep --color=auto ‘$user‘ /etc/passwd
[root@localhost ~]# grep --color=auto "$user" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]#
在例:将grep --color=auto别名为:grep1
[root@localhost ~]# alias grep1=‘grep --color=auto‘ 定义别名
[root@localhost ~]# grep1 ‘root‘ /etc/passwd 引用
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]#
!!这种定义,只对当前shell有效
锚定行首^最左
[root@localhost ~]# grep "^sh" /etc/passwd
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@localhost ~]#
锚定行尾$
[root@localhost ~]# grep "sh$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
mark:x:500:500:mark:/home/mark:/bin/bash
[root@localhost ~]#
锚定^patiern$,模式整行内容
[root@localhost ~]# grep "^sh$" /etc/passwd
锚定词首:\< 也可以用\b
[root@localhost ~]# grep "\<sh" /etc/passwd
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
b
[root@localhost ~]# grep "\bsh" /etc/passwd
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@localhost ~]#
锚定词尾
[root@localhost ~]# grep "sh\>" /etc/passwd
root:x:0:0:root:/root:/bin/bash
mark:x:500:500:mark:/home/mark:/bin
/bash
[root@localhost ~]#
-A 前
-B 后
-C 上下前后
[root@localhost ~]# grep -A 1 "^sh" /etc/passwd
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
[root@localhost ~]#
1、显示/proc/meminfo文件中以大写或小写S开头的行;用三种方式;
# grep -E "^[sS]" /proc/meminfo
# grep -E "^(s|S)" /proc/meminfo
# egrep -i "^s" /proc/meminfo
2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
# egrep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1
3、显示/etc/passwd文件中其默认shell为/bin/bash的用户;
# egrep "/bin/bash$" /etc/passwd | cut -d: -f1
4、找出/etc/passwd文件中的一位数或两位数;
# egrep --color=auto "\<[0-9]{1,2}\>" /etc/passwd
5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
# egrep "^[[:space:]]+" /boot/grub/grub.conf
6、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
# egrep "^#[[:space:]]+[^[:space:]]+" /etc/rc.d/rc.sysinit
7、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行;
# netstat -tan | egrep "LISTEN[[:space:]]*$"
8、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息;
# egrep "^([[:alnum:]]+\>).*\1$" /etc/passwd
9、显示当前系统上root、fedora或user1用户的默认shell;
# grep -E "^(root|fedora|user1)\>" /etc/passwd | cut -d: -f7
10、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello();
# grep -o -E "\<[[:alnum:]]+\>\(\)" /etc/rc.d/init.d/functions
11、使用echo命令输出一个绝对路径,使用grep取出其基名;
扩展:取出其路径名
# echo /etc/rc.d/init.d/functions | grep -o -E "[[:alnum:]]+/?$" | cut -d/ -f1
12、找出ifconfig命令结果中的1-255之间数字;
# ifconfig | grep -E "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"
扩展的正则表达式:
字符匹配:
.
[]
[^]
次数匹配:
*: 任意次
?:0或1次
+: 至少1次
{m}:精确匹配m次;
{m,n}:至少m次,至多次;
{m,}:至少m次;
{0,n}:至多次;
位置锚定:
^
$
\<, \b
\>, \b
分组:
()
引用:\1, \2, ...
或者:
a|b:a或者b
或者两侧的所有内容;
命令:
grep -E PATTERN FILE...
egrep PATTERN FILE...
本文出自 “无状态” 博客,谢绝转载!
原文地址:http://mark51.blog.51cto.com/3432122/1629165