正则表达式与grep示例

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.txt10_01.txt、...、11_59.txt)。重要的是要注意,由于使用了>而不是>>,如果文件已经存在,它将被新内容覆盖而不是追加。这意味着每个文件最终将只包含该特定分钟内的日志条目。

需要注意的是,如果access.log文件中没有与特定分钟匹配的条目,则相应的输出文件将为空。此外,如果日志文件非常大,这个脚本可能需要相当长的时间来执行,因为它必须多次遍历整个日志文件来查找匹配的行。然而,对于大多数实际应用来说,这种性能通常是可接受的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值