关于grep和egrep命令的作业

发布时间:2023年12月19日

目录

例题类型一:

例题类型二:


例题类型一:

1、显示/etc/rc.d/rc.sysinit文件中以不区分大小的h开头的行;

[root@node1 a1]# egrep -i '^h' /etc/rc.d/rc.sysinit
[root@node1 a1]# egrep 'h|H' /etc/rc.d/rc.sysinit
[root@node1 a1]# egrep '[hH]' /etc/rc.d/rc.sysinit

2、显示/etc/passwd中以sh结尾的行;

[root@node1 a1]# grep -E 'sh$' /etc/passwd
root:x:0:0:root:/root:/bin/bash
fox:x:1000:1000::/home/fox:/bin/bash

3、显示/etc/fstab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行

[root@node1 a1]# grep -E '^#\s+\S*' /etc/fstab?
# /etc/fstab
# Created by anaconda on Thu Sep ?7 05:25:48 2023
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
[root@node1 a1]# egrep '^#[[:space:]]+[^[:space:]]*' /etc/fstab?
# /etc/fstab
# Created by anaconda on Thu Sep ?7 05:25:48 2023
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
[root@node1 a1]# grep -E '^# +[^ ]*' /etc/fstab?
# /etc/fstab
# Created by anaconda on Thu Sep ?7 05:25:48 2023
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.

4、查找/etc/rc.d/rc.loca]中包含“以to开始并以to结尾”的字串行:

[root@node1 a1]# egrep '\bto.*to\b' /etc/rc.d/rc,local

5、查找/etc/inittab中含有“以s开头,并以d结尾的单词”模式的行;

[root@node1 a1]# grep -w 's.*d' /etc/inittab?
# 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:

6、查找ifconfig命令结果中的1-255之间的整数;

[root@node1 a1]# ifconfig| egrep -w '[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]'
? ? ? ? inet 192.168.17.129 ?netmask 255.255.255.0 ?broadcast 192.168.17.255
? ? ? ? inet6 fe80::20c:29ff:fee5:4a1d ?prefixlen 64 ?scopeid 0x20<link>
? ? ? ? ether 00:0c:29:e5:4a:1d ?txqueuelen 1000 ?(Ethernet)
? ? ? ? RX packets 6413 ?bytes 558548 (545.4 KiB)
? ? ? ? TX packets 4359 ?bytes 415704 (405.9 KiB)
lo: flags=73<UP,LOOPBACK,RUNNING> ?mtu 65536
? ? ? ? inet 127.0.0.1 ?netmask 255.0.0.0
? ? ? ? inet6 ::1 ?prefixlen 128 ?scopeid 0x10<host>
? ? ? ? RX packets 17 ?bytes 2039 (1.9 KiB)
? ? ? ? TX packets 17 ?bytes 2039 (1.9 KiB)

7、显示/var/log/secure文件中包含“Failed”或“FAILED”的行

[root@node1 a1]# grep -i 'Failed' ?/var/log/secure

8、在/etc/passwd中取出默认she11为bash

[root@node1 a1]# grep -w 'bash' /etc/passwd
root:x:0:0:root:/root:/bin/bash
fox:x:1000:1000::/home/fox:/bin/bash

9、以长格式列出/etc/目录下以ns开头、.conf结尾的文件信息

[root@node1 a1]# ls /etc | grep '\bns.*.conf\b'
nsswitch.conf
nsswitch.conf.bak

10高亮显示passwd文件中冒号,及其两侧的字符

[root@node1 a1]# egrep '.:.' /etc/passwd

11、匹配/etc/services中开头结尾字母一样的单词

理解一:

[root@node1 a1]# egrep ?'^(\b[a-zA-Z]+\b).*\1$' /etc/services?

理解二:

[root@node1 a1]# egrep -w '\b([a-zA-Z])\w*\1\b' /etc/services?

  • \b:表示单词边界,确保我们匹配的是整个单词。
  • ([a-zA-Z]):匹配一个字母,并使用括号捕获它,以便在后面的引用中使用。
  • \w*:匹配零个或多个字母、数字、下划线字符。
  • \1:引用第一个捕获组中的内容,即开头的字母。
  • \b:再次使用单词边界来确保我们匹配的是整个单词

例题类型二:

创建文件file.txt,文件内容:

48 ? Dec ? ?3BC1977 ? ?LPSX ? ?68.00 ? LVX2A ? 138

483 Sept ? 5AP1996 ? ? USP ? ?65.00 ? LVX2C ? 189

47 ? ?Oct ? ? ?3ZL1998 ? ?LPSX ? 43.00 ? KVM9D 512

219 ?dec ? ? ?2CC1999 ?CAD ? ? 23.00 ? PLV2C ? ?68

484 ?nov ? ? ?7PL1996 ? CAD ? ?49.00 ? ? PLV2C ?234

483 ? may ? ? 5PA1998 ?USP ? ? 37.00 ? ?KVM9D ?644

216 ? sept ? ? ?3ZL1998 ?USP ? ? 86.00 ? ?KVM9E ? 234

1.含有“48”字符串的行的总数

[root@node1 a1]# grep -c '48' file.txt?
4
[root@node1 a1]# grep '48' file.txt |wc -l
4

2.显示含有“48”字符串的所有行的行号

[root@node1 a1]# grep -n '48' file.txt?
1:48 ??Dec ???3BC1977 ???LPSX ???68.00 ??LVX2A ??138
3:483 Sept ??5AP1996 ????USP ???65.00 ??LVX2C ??189
9:484 ?nov ?????7PL1996 ??CAD ???49.00 ????PLV2C ?234
11:483 ??may ????5PA1998 ?USP ????37.00 ???KVM9D ?644

3.精确匹配只含有“48字符串的行、

[root@node1 a1]# grep -w '48' file.txt?
48 ??Dec ???3BC1977 ???LPSX ???68.00 ??LVX2A ??138
[root@node1 a1]# grep '\b48\b' file.txt?
48 ??Dec ???3BC1977 ???LPSX ???68.00 ??LVX2A ??138

4.抽取代码为484和483的城市位置

[root@node1 a1]# egrep '(484|483)' file.txt? ? ? ? ? ? ? ? ? ? #因为有()因此需要使用egrep
483 Sept ??5AP1996 ????USP ???65.00 ??LVX2C ??189
484 ?nov ?????7PL1996 ??CAD ???49.00 ????PLV2C ?234
483 ??may ????5PA1998 ?USP ????37.00 ???KVM9D ?644

5.显示行首不是4或8

[root@node1 a1]# egrep -v '^(4|8)' file.txt

219 ?dec ?????2CC1999 ?CAD ????23.00 ??PLV2C ???68

216 ??sept ?????3ZL1998 ?USP ????86.00 ???KVM9E ??234
[root@node1 a1]# egrep ^[^48] file.txt?
219 ?dec ?????2CC1999 ?CAD ????23.00 ??PLV2C ???68
216 ??sept ?????3ZL1998 ?USP ????86.00 ???KVM9E ??234

[root@node1 a1]# egrep -v '^4|^8' file.txt?

219 ?dec ?????2CC1999 ?CAD ????23.00 ??PLV2C ???68

216 ??sept ?????3ZL1998 ?USP ????86.00 ???KVM9E ??234

6.显示含有九月份(Sept)的行

[root@node1 a1]# grep ?-i 'sept' file.txt?
483 Sept ??5AP1996 ????USP ???65.00 ??LVX2C ??189
216 ??sept ?????3ZL1998 ?USP ????86.00 ???KVM9E ??234

7.显示以K开头,以D结尾的所有代码

[root@node1 a1]# grep 'K.*D' file.txt?
47 ???Oct ?????3ZL1998 ???LPSX ??43.00 ??KVM9D 512
483 ??may ????5PA1998 ?USP ????37.00 ???KVM9D ?644

8.显示头两个是大写字母,中间至少两个任意,并以C结尾的代码

[root@node1 a1]# egrep '\b[A-Z]{2,}.{2,}C\b' file.txt?
483 Sept ??5AP1996 ????USP ???65.00 ??LVX2C ??189
219 ?dec ?????2CC1999 ?CAD ????23.00 ??PLV2C ???68
484 ?nov ?????7PL1996 ??CAD ???49.00 ????PLV2C ?234

9.查询所有以5开始以1996或1998结尾的所有记录 ?

[root@node1 a1]# egrep '\b5.*(1996|1998)\b' file.txt?
483 Sept ??5AP1996 ????USP ???65.00 ??LVX2C ??189
483 ??may ????5PA1998 ?USP ????37.00 ???KVM9D ?644

文章来源:https://blog.csdn.net/2302_77035737/article/details/135068979
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。