如何使用grep,awk或sed在两个字符串之间提取文本?

时间:2017-01-31 18:54:59

标签: awk sed grep

请帮我使用SED,AWK或GREP来提取以下文字。我的文件看起来与此类似。

Text text text text text text text
Text text text text text text text
   Table A
<TABLE>
xxx xxx xxx xxx
xxx xxx xxx xxx
</TABLE>
Text text text text text text text
Text text text text text text text
   Table B
<TABLE>
xxx xxx xxx xxx
xxx xxx xxx xxx
</TABLE>

我只需要表A的所有信息,但我不知道如何去做。

3 个答案:

答案 0 :(得分:1)

这些中的任何一个都可能是您想要的,具体取决于您的预期输出和文本的其余部分:

$ awk '/Table A/{f=1} f{print; if (/<\/TABLE>/) exit}' file
   Table A
<TABLE>
xxx xxx xxx xxx
xxx xxx xxx xxx
</TABLE>

$ awk 'f{print; if (/<\/TABLE>/) exit} /Table A/{f=1}' file
<TABLE>
xxx xxx xxx xxx
xxx xxx xxx xxx
</TABLE>

答案 1 :(得分:0)

只要没有&lt; / TABLE&gt;在TABLE元素中。

sed -n '/Table A/,/<\/TABLE>/p' | grep -v "Table A" 

PS:grep -v可能没有必要我只是不知道我的头脑中没有包括起始模式的选项。

那将打印出来

 <TABLE>
  xxx xxx xxx xxx
  xxx xxx xxx xxx
 </TABLE>

如果您需要Text部分,则无效。 AWK可能会更好。

如果您需要具有变量名称的内容,则可以执行

 myTableName="Table A"
 sed -n "/${myTableName}/,/<\/TABLE>/p" | grep -v ${myTableName}

答案 2 :(得分:0)

你甚至可以grep,但awk似乎更好。

grep -A1000 "Table A" file.txt | grep -B1000 "Table B"