【问题标题】:sed: remove matching line and everything aftersed:删除匹配行和之后的所有内容
【发布时间】:2019-11-19 08:38:03
【问题描述】:

我正在尝试使用 sed 使用 git 过滤器删除文件中第一个空行之后的所有行。

这似乎删除了 空白行之后的所有内容

sed -i '/^$/q' test.rpt

我如何也包括要删除的空白行本身?

【问题讨论】:

标签: sed


【解决方案1】:

如果这是 GNU sed,只需使用 Q 而不是 q

sed -i '/^$/Q' test.rpt

对于 BSD sed,使用-n 开关来禁止自动打印,并手动打印行。例如:

sed -n -i '/^$/q;p' test.rpt

PS:您可能希望将正则表达式更改为 ^[[:blank:]]*$ 以将所有空白字符的行也视为空白行。

【讨论】:

  • 现在我只需要弄清楚如何让它在 git 中也能工作。当我从 MINGW64 控制台运行此命令时,它工作正常,但在 git 中它给出了有关输入文件的错误,所以我删除了 -i 命令。但后来它什么也没做:/
  • @Anova 它是否至少打印行直到空白?
  • 是的,在控制台中打印到空白之前的行都可以完美地工作
  • 那么,在git中,你为什么不把它的输出保存到一个中间文件,然后用它替换原始文件呢?不可能吗?
  • 点赞sed ... actualfile > tempfile && mv tempfile actualfile
【解决方案2】:

试试这个:-

sed -i '/^$/,$ d' inputfile

【讨论】:

    最近更新 更多