相关疑难解决方法(0)

从文件中删除行直到模式,除非模式不存在

我正在尝试使用类似sedawk执行以下操作编写过滤器:

  • 如果输入中不存在给定模式,则将整个输入复制到输出
  • 如果输入中存在模式,则仅将第一次出现后的行复制到输出中

这恰好适用于“git clean”过滤器,但这可能并不重要。重要的方面是这需要作为过滤器来实现,因为输入是在 stdin 上提供的。

我知道如何使用sed删除模式的行,例如。1,/pattern/d但是如果/pattern/在任何地方都不匹配,则会删除整个输入。

我可以想象编写一个完整的 shell 脚本来创建一个临时文件,执行某个操作grep -q或其他操作,然后决定如何处理输入。如果可能的话,我更愿意在不乱创建临时文件的情况下执行此操作。这需要高效,因为 git 可能会频繁调用它。

sed awk text-processing filter

6
推荐指数
2
解决办法
2690
查看次数

如何使用awk删除文件末尾的空行?

我想使用以下命令删除仅位于文件末尾的所有空行 awk

我只能使用以下命令成功找到删除顶部所有空行的方法:

awk '/^$/ && a!=1 {a=0} !/^$/ {a=1} a==1 {print}' file.txt
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何反转它,因此我可以删除底线。我知道我可以只使用上面的命令并用 管道它tac,但我更喜欢awk只使用命令的直接方法(如果可能的话)。

澄清一下,如果一行“视觉上是空的”,即最多包含空格和/或制表符,则该行被认为是“空的”。

awk text-processing

2
推荐指数
3
解决办法
385
查看次数

标签 统计

awk ×2

text-processing ×2

filter ×1

sed ×1