阿铭频繁地使用grep命令,那么这个命令到底有何独特之处?下面我们就来详细地探讨一番!
grep命令重要性
# grep -A2 'halt' /etc/passwd halt7halt:/sbin:/sbin/halt mail8mail:/var/spool/mail:/sbin/nologin operator11operator:/root:/sbin/nologin
阿铭的操作中,grep命令频繁出现,这充分显示了它在实际应用中的关键作用。在处理计算机系统和文件时,我们常常需要依赖它来搜寻关键数据。得益于grep命令,我们能够迅速且精确地找到所需信息,从而显著提升了工作效率。
grep命令格式及选项
# grep -B2 'halt' /etc/passwd sync5sync:/sbin:/bin/sync shutdown6shutdown:/sbin:/sbin/shutdown halt7halt:/sbin:/sbin/halt
# grep -C2 'halt' /etc/passwd sync5sync:/sbin:/bin/sync shutdown6shutdown:/sbin:/sbin/shutdown halt7halt:/sbin:/sbin/halt mail8mail:/var/spool/mail:/sbin/nologin operator11operator:/root:/sbin/nologin
grep命令的常规用法是grep [-] ‘关键词’。其中,-A、-B、-C是常见的选项,-A选项后需指定数字,如-A2即显示匹配行及其后的两行;-B选项后同样跟数字,如-B2即显示匹配行及其前的两行;-C选项后也需指定数字,如-C2即显示匹配行及其上下各两行。系统默认将匹配到的字符串以红色标注,这一点相当人性化。这实际上是因为grep默认设置就是使用–color=auto选项。
# grep -n 'root' /etc/passwd 1x0/root:/bin/bash 10x0/root:/sbin/nologin
过滤关键词及输出行号
# grep -nv 'nologin' /etc/passwd 1x0/root:/bin/bash 6x0/sbin:/bin/sync 7x0/sbin:/sbin/shutdown 8x0/sbin:/sbin/halt 45x1000/home/aminglinux:/bin/bash
筛选掉含有特定关键词的行并显示行号,有助于我们精确地找到所需信息。例如,在处理大量文件时,通过行号可以更快捷地定位到特定内容。同样,排除不含该关键词的行并显示行号也很有用,比如在剔除无关信息时,这种方法可以帮助我们识别出不需要的行。借助行号的明确标注,便于后续的操作处理。
# grep '[0-9]' /etc/inittab # multi-user.target: analogous to runlevel 3 # graphical.target: analogous to runlevel 5
正则表达式在grep中的应用
# grep -v '[0-9]' /etc/inittab # inittab is no longer used. # # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target # # systemd uses 'targets' instead of runlevels. By default, there are two main targets: # # # To view current default target, run: # systemctl get-default ## To set a default target, run: # systemctl set-default TARGET.target
在正则表达式中,符号“^”代表一行的起始位置,而“$”则表示一行的结束。对于空行,我们可以用“^$”来表示。在自定义文件时,中括号“[]”特别有用,比如“[0-9]”可以用来匹配数字,而“[0-9a-zA-Z]”则可以筛选出数字和大小写字母。使用“r.o”可以筛选出包含任意字符的“r”和“o”之间的行,而“.*”则可以匹配任意数量的任意字符,包括空行,从而能够匹配到“/etc/”目录下的所有行。
[plugins] #disable = rpm, selinux, dovecot [tunables] #rpm.rpmva = off #general.syslogsize = 15 # grep -v '^#' /etc/sos.conf [plugins] [tunables]
指定字符出现次数
# grep -v '^#' /etc/sos.conf |grep -v '^$' [plugins] [tunables]
设定需要筛选的字符重复的频次,需使用花括号{},其中包含数字,来指明该字符需重复的特定次数,同时要注意花括号{}需要用转义字符括起来。此外,还可以通过{n1,n2}的形式来指定一个范围,其中n1和n2分别代表起始和结束的次数。< n2时,代表重复n1到n2次,n2为空则表示大于等于n1次。借助这方法,能更精准地筛选出符合要求的内容。
egrep工具扩展功能
# mkdir /tmp/1 # cd /tmp/1 # vim test.txt //内容如下 123 abc 456 abc2323 #laksdjf Alllllllll
# grep '^[^a-zA-Z]' test.txt 123 456 #laksdjf # grep '[^a-zA-Z]' test.txt 123 456 abc2323 #laksdjf
egrep是grep的一个升级版,具备grep无法实现的功能。它使用加号“+”来匹配前面字符的一个或多个实例,同时花括号“{}”可以直接使用,无需转义。括号“()”可以用来表示一个整体,例如“(rooo|rato)”可以筛选出包含“rooo”或“rato”的行,而“(oo)+”则表示一个或多个“oo”,可以与其他符号结合,从而扩展了匹配的规则。
在实际操作过程中,很多人偏爱使用grep,也有人更倾向于egrep。何不点赞并转发这篇文章,和大家分享一下你个人的使用体验。
# grep 'r.o' /etc/passwd root0root:/root:/bin/bash operator11operator:/root:/sbin/nologin