1.进入/lianxi目录,复制/etc/passwd到当前目录下,然后对passwd进行操作
cd /lianxi
cp /etc/passwd ./
2、查找出当前passwd文件中以ftp或者mail开头的行。
grep '^ftp\|^mail' passwd
3、查找出当前passwd文件中首行不是以r、m、f开头的行。
grep '^[^rmf]' passwd
4、查找出当前passwd文件中以bash结尾的行。
grep 'bash$' passwd
5、查找出/etc/login.defs文件中的有效行(不显示空行和注释行)。
grep -v '^#' /etc/login.defs | grep -v '^$'
6、查找出/var/log/messages文档中有16个字母的单词?
grep -o '\b[a-zA-Z]\{16\}\b' /var/log/messages
7、查找出来/etc/passwd文件里用户名包含liu同时使用bash的用户
grep 'liu' passwd | grep 'bash$'
8、查找/etc/ssh/sshd_config 里的有效行
grep -v '^#' /etc/ssh/sshd_config | grep -v '^$'
9、查找出/etc/ssh/sshd_config 文件里的包含连续2个数字的行
grep '[0-9]\{2\}' /etc/ssh/sshd_config
10、查找出包含特殊字符的行
grep '[^a-zA-Z0-9\s]' /path/to/file
11、查找出不包含数字的行
grep -v '[0-9]' /path/to/file
12、查找出/var/log/secure里的ip地址出来
grep -oE '(([0-9]{1,3}\.){3}[0-9]{1,3})' /var/log/secure
13、写一个表示下面网址的正则表达式出来。例如:
http://www.baidu.com
http://www.sina.com
http://www.163.com
http://www.12306.cn
http://www.qillu.edu
===
grep -oE 'http://([a-zA-Z0-9.]+)' file.txt
14、写一个表示下面网址的正则表达式出来。例如:
http://www.baidu.com
http://www.sina.com
http://www.163.com
http://www.12306.cn
http://www.qillu.edu
rsync://www.github.com/abc
ftp://192.168.0.1
ftp://www.baidu.com
===
grep -oE '(http|https|ftp|rsync)://([a-zA-Z0-9.]+(/[a-zA-Z0-9/?&=._-]+)?)' file.txt
15、写一个表示邮箱的正则
feng@qq.com
1234feng@163.com
meng.xianhui@yahoo.cn
liudehua@sina.com
10001@qq.com
123_ui@12306.cn
qilu@qilu.edu
qilu@qilu.edu/fjdkfjk/fjdk
===
grep -oE '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' file.txt
16、C类ip地址的正则表达式
section1:范围在192-223之间
section2和section3和section4范围:0-255之间
例如:193.168.23.1
====
grep -oE '((192|193|194|195|196|197|198|199|200|201|202|203|204|205|206|207|208|209|210|211|212|213|214|215|216|217|218|219|220|221|222|223)\.([0-9]{1,3}\.){2}[0-9]{1,3})' file.txt
或者使用更简洁的范围表达式:
grep -oE '((19[2-9]|2[01][0-9]|22[0-3])\.([0-9]{1,3}\.){2}[0-9]{1,3})' file.txt
请注意,根据具体需求和使用的工具(如grep的不同版本),这些命令可能需要适当调整。
17.匹配从16:54到16:58分之间的时间
\[16/Apr/2024:16:5[4-8]:[0-5][0-9]
18.一个小时的正则
\[16/Apr/2024:11:[0-5][0-9]:[0-5][0-9]#这将匹配从11:00到11:59的所有时间
19.一天的正则
\[16/Apr/2024#注意,这个正则表达式不会匹配到具体的时间戳,但会匹配到该日期开始的任何行(假设时间戳是该行的开始部分)
20.一分钟的正则
\[16/Apr/2024:11:42:[0-5][0-9]#这将匹配从11:42:00到11:42:59的所有时间
21.每分钟
这个脚本是一个Bash脚本,旨在从名为access.log
的日志文件中提取特定时间段(在这个例子中是2024年4月16日的10点到11点)内每一分钟的所有日志条目,并将这些条目分别保存到以分钟为单位命名的单独文件中。
#!/bin/bash
# 将10到11点之内的每分钟的数据都过滤出来,存放到单独的一个文件里
mkdir -p 11-16 # 使用-p参数以避免目录已存在时的错误
for j in {10..11}
do
for k in {00..59}
do
egrep "16/Apr/2024:$j:$k:[0-5][0-9]" access.log > 11-16/${j}_${k}.txt
done
done
脚本包含两个嵌套的for
循环。外层循环遍历小时(从10到11),内层循环遍历分钟(从00到59)。对于每一分钟,脚本使用egrep
(或grep -E
,用于支持扩展正则表达式)来搜索access.log
文件中匹配特定日期(16/Apr/2024
)、小时(由变量j
表示)和分钟(由变量k
表示)以及任意秒数([0-5][0-9]
,匹配从00到59的秒)的行。
找到的每一行都被重定向(>
)到11-16
目录下以小时和分钟命名的文件中(例如,10_00.txt
、10_01.txt
、...、11_59.txt
)。重要的是要注意,由于使用了>
而不是>>
,如果文件已经存在,它将被新内容覆盖而不是追加。这意味着每个文件最终将只包含该特定分钟内的日志条目。
需要注意的是,如果access.log
文件中没有与特定分钟匹配的条目,则相应的输出文件将为空。此外,如果日志文件非常大,这个脚本可能需要相当长的时间来执行,因为它必须多次遍历整个日志文件来查找匹配的行。然而,对于大多数实际应用来说,这种性能通常是可接受的。