繁体   English   中英

如何从bash脚本中的文件中提取文本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM