标签:style blog color os 使用 io 文件 for 数据
【版权声明:转载请保留出处:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】
Linux系统中有很多文件,比如配置文件、日志文件、用户文件等。文件中都包含了大量的信息,我们可以使用cat等命令轻松将其输出到屏幕,但如果要从文件中分析或提取数据,还需要其他工具来实现。而linux正好提供了这些工具:grep、awk、sed等。把这些工具使用好,可以极大地提高你的工作效率,对系统管理员分析数据有极大帮助,而对linux开发人员来说也可以在开发测试中以及平时使用中节省不少时间。本系列文中将介绍这些工具来实现文本过滤分析。
# grep "user" /etc/passwd usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin qemu:x:107:107:qemu user:/:/sbin/nologin radvd:x:75:75:radvd user:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin saslauth:x:994:76:"Saslauthd user":/run/saslauthd:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin nm-openconnect:x:992:991:NetworkManager user for OpenConnect:/:/sbin/nologin #一般我们将要查找的字符串用双引号包含起来,一是以防被误解为 s h e l l命令,二是可以用来查找多个单词组成的字符串。
# grep -c "user" /etc/passwd 8 #使用-n选项输出匹配行及行号:
# grep -n "user" /etc/passwd 18:usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin 19:oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin 22:qemu:x:107:107:qemu user:/:/sbin/nologin 25:radvd:x:75:75:radvd user:/:/sbin/nologin 27:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin 30:saslauth:x:994:76:"Saslauthd user":/run/saslauthd:/sbin/nologin 34:rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin 38:nm-openconnect:x:992:991:NetworkManager user for OpenConnect:/:/sbin/nologin #其中第一列输出行号,后面输出行内容。
# grep -n "\<user\>" /etc/passwd 18:usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin 19:oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin 22:qemu:x:107:107:qemu user:/:/sbin/nologin 25:radvd:x:75:75:radvd user:/:/sbin/nologin 30:saslauth:x:994:76:"Saslauthd user":/run/saslauthd:/sbin/nologin 38:nm-openconnect:x:992:991:NetworkManager user for OpenConnect:/:/sbin/nologin #瞬间少了27和34行。
[root@localhost shell_text_filter]# grep -ni "\<user\>" /etc/passwd 12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 17:polkitd:x:999:999:User for polkitd:/:/sbin/nologin 18:usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin 19:oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin 20:colord:x:998:998:User for colord:/var/lib/colord:/sbin/nologin 22:qemu:x:107:107:qemu user:/:/sbin/nologin 25:radvd:x:75:75:radvd user:/:/sbin/nologin 30:saslauth:x:994:76:"Saslauthd user":/run/saslauthd:/sbin/nologin 34:rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin 35:nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin 38:nm-openconnect:x:992:991:NetworkManager user for OpenConnect:/:/sbin/nologin瞬间多了几行。
# grep -v "a" /etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown nobody:x:99:99:Nobody:/:/sbin/nologin polkitd:x:999:999:User for polkitd:/:/sbin/nologin usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin unbound:x:997:997:Unbound DNS resolver:/etc/unbound:/sbin/nologin qemu:x:107:107:qemu user:/:/sbin/nologin openvpn:x:996:995:OpenVPN:/etc/openvpn:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin #上面列出的行都不包含”a”。
# ps x | grep vsftpd 1020 ? Ss 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf 10264 pts/1 S+ 0:00 grep --color=auto vsftpd #但是发现打印结果包含当前shell进程,我们可以通过使用-v选项来过滤输出结果,如下:
# ps x | grep "vsftpd" | grep -v "grep" 1020 ? Ss 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf #该方法相当常用。
# grep '.mm..' /etc/passwd smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin # # grep 'm..l' /etc/passwd mail:x:8:12:mail:/var/spool/mail:/sbin/nologin mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin #在行首以^匹配字符串或字符序列,^只允许在一行的开始匹配字符或单词。
# grep '^ma' /etc/passwd mail:x:8:12:mail:/var/spool/mail:/sbin/nologin mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin #正则表达式可以将各种模式混合使用:
# grep '^ma....ll' /etc/passwd mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin #^在正则表达式中使用频繁,因为大量的抽取操作通常在行首。
# grep 'bash$' /etc/passwd root:x:0:0:root:/root:/bin/bash allen:x:1000:1000:allen:/home/allen:/bin/bash aln:x:1001:1001::/home/aln:/bin/bash #如果要匹配所有空行,执行以下操作:
^ $具体分析为匹配行首,又匹配行尾,中间没有任何模式,因此为空行。
^ . $不像空白行,在行首与行尾之间有一个模式,代表任意单字符。
# grep 'al[l,n]' /etc/passwd allen:x:1000:1000:allen:/home/allen:/bin/bash aln:x:1001:1001::/home/aln:/bin/bash #忽略大小写的也可以由另外一种方式:
# grep 'System' /etc/passwd dbus:x:81:81:System message bus:/:/sbin/nologin pulse:x:995:994:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin [root@localhost shell_text_filter]# grep '[Ss]ystem' /etc/passwd dbus:x:81:81:System message bus:/:/sbin/nologin systemd-journal-gateway:x:191:191:Journal Gateway:/var/log/journal:/usr/sbin/nologin pulse:x:995:994:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin #使用\{\}匹配模式结果出现的次数,使用*可匹配所有匹配结果任意次,但如果只要指定次数,就应使用 \ { \ } ,此模式有三种形式,即:
# grep 'm\{2,\}' /etc/passwd smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin #过滤9出现2次,并以4结尾的行:
# grep '9\{2,\}4' /etc/passwd pulse:x:995:994:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin saslauth:x:994:76:"Saslauthd user":/run/saslauthd:/sbin/nologin #grep命令加-E参数,这一扩展允许使用扩展模式匹配。比如要获取包含allen或aln的行,可以这样用。
# grep -E 'allen|aln' /etc/passwd allen:x:1000:1000:allen:/home/allen:/bin/bash aln:x:1001:1001::/home/aln:/bin/bash #
标签:style blog color os 使用 io 文件 for 数据
原文地址:http://blog.csdn.net/shallnet/article/details/38799739