Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Bash脚本打印模式1,搜索并打印模式2到模式3的所有行,以及打印模式4_Regex_Linux_Bash_Awk_Sed - Fatal编程技术网

Regex Bash脚本打印模式1,搜索并打印模式2到模式3的所有行,以及打印模式4

Regex Bash脚本打印模式1,搜索并打印模式2到模式3的所有行,以及打印模式4,regex,linux,bash,awk,sed,Regex,Linux,Bash,Awk,Sed,请帮助-我对我的sed/awk/grep非常生疏,我正在尝试处理一个文件(大约4700页长的PDF导出) 以下是我试图做的:搜索/打印与模式1匹配的行,搜索与模式2匹配的行,并打印该行以及从该行到模式3的所有行(如果它包括/打印与模式3匹配的行,此时我同意),以及搜索/打印与模式4匹配的行 上面所有的模式都应该在文件中按顺序出现几百次(模式1、2、3、4),我需要保持它们的顺序 模式1:以1-5和空格开头的行(尽管看起来很模糊,但这足够具体) 模式2:以(所有封口)溶液开头的线条: 模式3:以(

请帮助-我对我的sed/awk/grep非常生疏,我正在尝试处理一个文件(大约4700页长的PDF导出)

以下是我试图做的:搜索/打印与模式1匹配的行,搜索与模式2匹配的行,并打印该行以及从该行到模式3的所有行(如果它包括/打印与模式3匹配的行,此时我同意),以及搜索/打印与模式4匹配的行

上面所有的模式都应该在文件中按顺序出现几百次(模式1、2、3、4),我需要保持它们的顺序

模式1:以1-5和空格开头的行(尽管看起来很模糊,但这足够具体) 模式2:以(所有封口)溶液开头的线条: 模式3:以(所有CAP)合规性开头的行: 模式4:以IP地址开头的行

以下是我拼凑的东西,但显然不起作用:

#!/bin/bash
#
sed '

/^[1-5]\s/p {

       /^SOLUTION/,/^COMPLIANCE/p {

                /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/p }

}' sample.txt

要在sed中使用
p
,您还需要使用
-n
,并为扩展正则表达式添加
-r

下面是它的外观:

sed -r -n '{
/^[1-5] /p
/^SOLUTION/,/^COMPLIANCE/p
/^([0-9]{1,3}[\.]){3}[0-9]{1,3}/p
}' sample.txt

您可能想要这样的东西,未经测试,因为您没有提供任何示例输入或预期输出:

awk '
BEGIN         { state = 0 }
/^[1-5] /     { if (state ~ /[01]/) { block = $0; state = 1 } }
/^SOLUTION/   { state = (state ~ /[12]/ ? 2 : 0) }
state == 2    { block = block ORS $0 }
/^COMPLIANCE/ { state = (state == 2 ? 3 : state) }
/^([0-9]{1,3}\.){3}[0-9]{1,3}/ { if (state == 3) { print block ORS $0; state = 0 } }
' file

sample.txt
中的几行添加到您的问题中。grep用于在文件中查找RE并打印匹配行。sed用于对文件中的各行进行简单替换。对于其他任何东西,您都应该使用awk。发布一些示例输入和预期输出,我们可以帮助您。例如,如果您点击了以数字1-5开头的两行,并且在以“解决方案”开头的第一行之前有一个空格,该怎么办?你忽略了第一个还是什么?找到匹配的行总是很简单的,处理看起来相似但不匹配的行是很复杂的,所以创建示例输入来说明这一点。我确实刚刚让它工作起来,但实际上我更喜欢你的IP地址方法。非常感谢!不管满足条件的顺序如何,这难道不会打印出与每个条件匹配的行吗?不,他特别说
以上所有模式都应该在文件中按顺序(模式1,2,3,4)出现几百次,我需要保持它们的顺序。
@EdMorton好的,但他的情况下实际的区别是什么?若线从数字和空格开始,它不能匹配任何其他模式。所以在我的例子中,我们只打印模式1匹配,然后模式2到3匹配,然后模式4匹配。明白了,但这只是冰山一角,我怀疑OP还没有真正考虑到雨天的情况。