Bash 多行grep
我得到了一个模式如下的文件:Bash 多行grep,bash,filter,grep,cygwin,Bash,Filter,Grep,Cygwin,我得到了一个模式如下的文件: 172.18.0.7 172.18.0.9 172.18.0.8 172.18.0.7 172.18.0.9 172.18.0.8 172.18.0.7 172.18.0.9 172.18.0.8 172.18.0.7 172.18.0.9 172.18.0.8 所以它是7->9->8->7->9->8->7->9->8->7->9->8->7->9->8。。。最后 我想得到这个模式不同的行。例如7->8->9: 172.18.0.7 172.18.0.8 172
172.18.0.7
172.18.0.9
172.18.0.8
172.18.0.7
172.18.0.9
172.18.0.8
172.18.0.7
172.18.0.9
172.18.0.8
172.18.0.7
172.18.0.9
172.18.0.8
所以它是7->9->8->7->9->8->7->9->8->7->9->8->7->9->8。。。最后
我想得到这个模式不同的行。例如7->8->9
:
172.18.0.7
172.18.0.8
172.18.0.9
由于文件有大约100000行,我想用grep来过滤它们
我试过这样的方法:
172.18.0.7
172.18.0.9
172.18.0.8
172.18.0.7
172.18.0.9
172.18.0.8
172.18.0.7
172.18.0.9
172.18.0.8
172.18.0.7
172.18.0.9
172.18.0.8
grep-Pzl“172.18.0.7*\n 172.18.0.9*\n 172.18.0.8*\n”
结果不太对劲。我想找到一个符合前面提到的模式的模式。使用GNU awk:
awk -v RS='\n*[0-9.]+7\n[0-9.]+9\n[0-9.]+8\n' NF file
设置记录分隔符RS
,使其匹配3行数字和点,并分别以7
、9
、8
(按此顺序)结束
输出记录ORS
分隔符(默认值)\n
,输入脚本(仅NF
)打印所有非空行(不匹配RS
)。使用GNU awk:
awk -v RS='\n*[0-9.]+7\n[0-9.]+9\n[0-9.]+8\n' NF file
设置记录分隔符RS
,使其匹配3行数字和点,并分别以7
、9
、8
(按此顺序)结束
输出记录
ORS
分隔符(默认值)\n
,输入脚本(仅NF
)打印所有非空行(不匹配RS
)。GNU sed 4.2支持-z
:
sed -z 's/172.18.0.7\n172.18.0.9\n172.18.0.8\n//g' file
当你看到一组三个势函数的第一行是
some_other_chars_before_172.18.0.7
当您在匹配开始处添加\n
时,您需要删除最后一个\n
以查找两个集合,但这将允许最后一行以结尾
172.18.0.8_and_more_characters
看起来像是死锁,但您可以将输入修改为Windows样式并匹配smart:
sed -rz 's/\n/\r\n/g;s/(\n|^)172.18.0.7\r\n172.18.0.9\r\n172.18.0.8\r//g;s/\r//g' file
GNU sed 4.2支持
-z
:
sed -z 's/172.18.0.7\n172.18.0.9\n172.18.0.8\n//g' file
当你看到一组三个势函数的第一行是
some_other_chars_before_172.18.0.7
当您在匹配开始处添加\n
时,您需要删除最后一个\n
以查找两个集合,但这将允许最后一行以结尾
172.18.0.8_and_more_characters
看起来像是死锁,但您可以将输入修改为Windows样式并匹配smart:
sed -rz 's/\n/\r\n/g;s/(\n|^)172.18.0.7\r\n172.18.0.9\r\n172.18.0.8\r//g;s/\r//g' file
不清楚,请确实提及您的样本的更多细节,然后让我们知道。不清楚,请确实提及您的样本的更多细节,然后让我们知道。当OP只想查看最后一位数字以控制匹配时,解决方案是正确的,当OP还想查找像
special172.18.0.7
这样的行时,111.11.1.7
和172.18.0.888888
作为一个不同的模式,您的解决方案需要一些改进。当OP只想查找最后一位数字来控制匹配时,解决方案是正确的,而OP也想查找类似special172.18.0.7
这样的行,111.11.1.7
和172.18.0.888888
作为一种不同的模式,您的解决方案需要一些改进。