我正在尝试使用类似sed
或awk
执行以下操作编写过滤器:
这恰好适用于“git clean”过滤器,但这可能并不重要。重要的方面是这需要作为过滤器来实现,因为输入是在 stdin 上提供的。
我知道如何使用sed
删除模式的行,例如。1,/pattern/d
但是如果/pattern/
在任何地方都不匹配,则会删除整个输入。
我可以想象编写一个完整的 shell 脚本来创建一个临时文件,执行某个操作grep -q
或其他操作,然后决定如何处理输入。如果可能的话,我更愿意在不乱创建临时文件的情况下执行此操作。这需要高效,因为 git 可能会频繁调用它。
我想使用以下命令删除仅位于文件末尾的所有空行 awk
我只能使用以下命令成功找到删除顶部所有空行的方法:
awk '/^$/ && a!=1 {a=0} !/^$/ {a=1} a==1 {print}' file.txt
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何反转它,因此我可以删除底线。我知道我可以只使用上面的命令并用 管道它tac
,但我更喜欢awk
只使用命令的直接方法(如果可能的话)。
澄清一下,如果一行“视觉上是空的”,即最多包含空格和/或制表符,则该行被认为是“空的”。