【问题标题】:How to remove n lines from the top file or stdout (i.e rip its header off) [duplicate]如何从顶部文件或标准输出中删除 n 行(即撕掉它的标题)[重复]
【发布时间】: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>

【问题讨论】:

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

标签: python html shell


【解决方案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 计数器更巧妙的方法,但它确实可以完成这项工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多