grep是Linux中的一个截取/筛选命令,一行一行分析处理的。
san@seth:~$ grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a : 将 binary 文件以 text 文件的方式搜寻数据
-c : 计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n : 顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔!
在文件中查找以^MANPATH开头的文件行,并打印行号。
san@seth:~$ grep -n MANPATH /etc/manpath.config
29:MANPATH_MAP /bin /usr/share/man
30:MANPATH_MAP /usr/bin /usr/share/man
31:MANPATH_MAP /sbin /usr/share/man
......略......
我知道使用 last 可以输出登入者,但是 last 最后两行并非账号内容,那么请问,
我该如何以一行指令串取得登入系统的总人次?
last | grep [a-zA-Z] | grep -v 'wtmp' | grep -v 'reboot' | \
> grep -v 'unknown' |wc -l
# 由于 last 会输出空白行, wtmp, unknown, reboot 等无关账号登入的信息,因此,我利用grep 取出非空白行,以及去除上述关键词那几行,再计算行数,就能够了解啰!
"\" 在Linux中,此符号为转移字符,在此处为换行,在下一行出现>符号,在继续上一行的输入
grep正则用法:
regular_express.txt文件是从鸟哥给的服务器上下载的,下载如下:
wget http://linux.vbird.org/linux_basic/0330regularex/regular_express.txt
例题一、搜寻特定字符串:在文件中搜索关键字“the" ,并打印行号。
grep -n 'the' regular_express.txt
grep -vn 'the' regular_express.txt # -v为反选,搜索不含”the"的行,并打印行号。
例题二、利用中括号 [] 来搜寻集合字符
grep -n 't[ae]st' regular_express.txt # 搜索包含tast或test的关键字,并打印行号。
其实 [] 里面不论有几个字符,他都仅代表某『一个』字符, 所以,上面的例子说明了,我需要的字符串是『tast』或『test』两个字符串而已!
例题三、行首与行尾字符 ^ $
grep -n '^the' regular_express.txt # 以the开头的行
grep -n '^[^a-zA-Z]' regular_express.txt
那个 ^ 符号,在字符集合符号(括号[])之内与之外是不同的! 在 [] 内代表『反向选择』,在 [] 之外则代表定位在行首的意思。
grep -n '\.$' regular_express.txt # 以小数点结尾的行,"$"符号表示以$字符前面的字符结尾的行。
grep -n '^$' regular_express.txt # 搜索文件中的行号。
例题四、任意一个字符 . 与重复字符 *
. (小数点):代表『一定有一个任意字符』的意思;
* (星星号):代表『重复前一个字符, 0 到无穷多次』的意思,为组合形态
to be continued...