如何从顶部文件或标准输出中删除 n 行(即撕掉它的标题)[重复]

Posted

技术标签:

【中文标题】如何从顶部文件或标准输出中删除 n 行(即撕掉它的标题)[重复]【英文标题】:How to remove n lines from the top file or stdout (i.e rip its header off) [duplicate] 【发布时间】:2020-04-06 10:21:10 【问题描述】:

从一些不同长度的输出顶部删除 3 行(或其他)行的最简单的全局 shell 方法是什么?我意识到只有知道文档长度有多长,tail 才会起作用。

示例:假设我们要处理它,但排除它的输出的前 2 行

$ curl -s http://google.com
<html><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

这里很有趣的是python解决方案

$ curl -s http://google.com  | python -c "import sys; [sys.stdout.write(line) for line in list(sys.stdin)[2:]]" | sort
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
<H1>301 Moved</H1>
The document has moved

以这种方式扩展你的外壳

$ function from() 
> python -c "import sys; [sys.stdout.write(line) for line in list(sys.stdin)[$1:]]"
> 

用任意数量的行来做到这一点

$ curl -s http://google.com  | from 3 | sort
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

【问题讨论】:

如果您想自行回答您的问题,您应该单独发布答案,而不是作为问题的一部分。但是,这是一个很好回答的副本 (***.com/q/339483/3266847),如果您觉得它丢失了,您可能应该在此处添加您的答案。 对于不只是第一行,而是任意行数的问题:***.com/q/604864/3266847(但它与我在上面发布的那个重复) @Benjamin W. Ahhhh 就是这样。我只是为了好玩而做 python 的事情。我很高兴答案不在 awk 中 :-) 【参考方案1】:

我认为最简单最“标准”的方式是使用tail:

curl ... | tail -n +4

tail 命令的意思是打印从第 4 行开始的所有行(即跳过第 1 到 3 行)。

如果你想要一个纯 bash 单行,你可以这样做:

lineno=1 ; curl ... | while IFS= read -r line ; do [ $lineno -gt 3 ] && echo "$line" ; lineno=$((lineno+1)); done

可能有一种比笨拙的 lineno 计数器更巧妙的方法,但它确实可以完成这项工作。

【讨论】:

以上是关于如何从顶部文件或标准输出中删除 n 行(即撕掉它的标题)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sed 删除文件的最后 n 行

head命令

文本处理工具uniq去重与sort排序

如何让 puma 将日志发送到标准输出

dataTableOutput 顶部和底部的空“行流体”div

如何使用批处理文件或curl从我的文本文件中删除' r n'?