text - 使用 awk 或 sed 在但不包括页眉和页脚之间获取文本

标签 text awk sed grep

假设我有一个文件myfile.txt,内容如下:

1234
5678
start
stuff
stop
9871

我想获取页眉“开始”和页脚“停止”之间的数据,但包括这些边框(所以在这种情况下,我的结果只是“东西”行).使用 awk 和 sed,我尝试了以下操作:

 awk '/start/ { show=1 } show; /stop/ { show=0 }' myfile.txt
 sed -n '/start/,/stop/p' myfile.txt

但是这些包括输出中的页眉和页脚。 我该怎么做才能不保留页眉和页脚 - 而只保留其间的信息?

最佳答案

只需颠倒测试顺序即可:

$ awk '/stop/{show=0} show; /start/ { show=1 }' myfile.txt
stuff

工作原理

  • /stop/{show=0}

    每当遇到与正则表达式 stop 匹配的行时,我们都会将变量 show 设置为 0 (false)。

  • 显示;

    如果 show 为真,打印该行。

    更详细地说,show 是一个条件,意味着它被评估,如果为真,则执行一个 Action 。由于我们没有明确指定操作,因此执行默认操作,即 print $0

    由于没有明确指定操作,我们需要在 show 之后加上 ;,以便将它与下一个命令分开。

  • /start/{ show=1 }

    每当我们遇到与正则表达式 start 匹配的行时,我们将变量 show 设置为 1(真)。

关于text - 使用 awk 或 sed 在但不包括页眉和页脚之间获取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49037996/

相关文章:

bash - 将 C 头文件中的#defines 转换为 bash 变量

python - 组织数据

Python pdf2txt 清理问题

awk - FS 中的脱字符 (^) (gawk)

java - 日期格式 : loses the locale settings after parsing

arrays - 在 bash 中使用数组时变量未正确替换

bash - 使用sed替换文件中任何给定行中的字符串

sed - 如何跳过匹配字符串的行

html - 使用 CSS 悬停时文本滑动交换

text - 在 AutoHotkey 中快速发送长文本