[英]How do I extract text from a file in a bash script
我正试图从多行文件中提取文本。 例如,我需要将所有文本从“ 1.0节”提取到“ 3.0节”
这可以有很多行。
我有可以工作的代码,但看起来笨拙且缓慢。 有一个更好的方法吗? SED? reg表达式?
flag="false"
for line in ${textFile};
do
if [ "$line" == "Section 3.0" ]; then
flag="false"
fi
if [ "$flag" == "true" ]; then
temp_var+=$line
fi
if [ "$line" == "Section 1.0" ]; then
flag="true"
fi
done
使用sed,您可以执行以下操作:
sed -n '/Section 1\.0/,/Section 3\.0/p' file
编辑:要忽略开始和结束模式,请使用:
sed -n '/Section 1\.0/,/Section 3\.0/{/Section [13]\.0/!p;}' file
awk解决方案:
awk '/Section 1\.0/{flag=0} flag{print} /Section 3\.0/{flag=1}' file
sed -n '/Section 1\.0/,/Section 3\.0/p' file
从file
打印出与第一个正则表达式匹配的行之间的所有行,再到与第二个表达式匹配的下一行,从file
打印所有行。 如果有多个这样的匹配项,它们将以触发器方式打印(查找图案1,通过图案2打印,查找图案1 ...)
如果只需要第一个这样的部分,则可以在找到结束条件时退出:
sed -n '/Section 3\.0/q;/Section 1\.0/,$p' file
这将排除匹配结束条件的行(猜测这正是您真正想要的)。 为简单起见,这假设您在1.0节之前没有3.0节。 (某些sed
方言可能需要稍有不同的语法;可能必须将分号更改为换行符,或者将脚本拆分为两个单独的-e
参数。)
也可以使用awk
:
awk '/Section 3\.0/{f=0} f; /Section 1\.0/{f=1}' file
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.