我正在尝试使用grep从文本文件中获取特定范围的行;行范围需要通过两个变量来标识。到目前为止,我一直在尝试使用通配符'*'来尝试失败,示例包括:(我可以理解为什么前两个不起作用)
grep "$Var1"*"$Var2" file.txt
grep "$Var1*$Var2" file.txt
echo "$Var1*$Var2" | grep file.txt
grep
不适用于在多行上搜索模式。还有其他更适合此任务的工具:awk
和sed
。
由于您使用变量来保存模式,因此事情可能会变得棘手。请先尝试使用硬编码模式。如果您没做错,请尝试用变量替换硬编码的模式。
使用awk
:
awk '/'"$Var1"'/,/'"$Var2"'/' file.txt
带有硬编码模式的同一命令解释了该概念:
awk '/pattern1/,/pattern2/' file.txt
解释:
/pattern1/,/pattern2/
是一个范围。范围从行匹配开始,到行匹配pattern1
结束pattern2
。awk
仅打印该范围内的行。了解更多信息awk
:http : //www.catonmat.net/blog/awk-one-liners-explained-part-one/
使用sed
:
sed -n '/'"$Var1"'/,/'"$Var2"'/ p' file.txt
带有硬编码模式的同一命令解释了该概念:
sed -n '/pattern1/,/pattern2/ p' file.txt
解释:
-n
sed仅在被告知时才打印行。/pattern1/,/pattern2/
是一个范围。范围从行匹配开始,到行匹配pattern1
结束pattern2
。对于该范围内的每一行,将执行以下命令。p
在年底告诉sed
印刷线条。了解更多有关的信息sed
:http : //www.catonmat.net/blog/sed-one-liners-explained-part-one/
如果确实需要使用,grep
则可以使用-P
告诉grep
使用perl正则表达式引擎。手册页上有关于该功能的说明:
将模式解释为与Perl兼容的正则表达式(PCRE)。这是高度实验性的,grep -P可能会警告未实现的功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句