regex - sed:在匹配之前显示行

标签 regex linux bash sed

使用 sed 查找匹配行之前的最后一行:

echo -e "aaa\nbbb\nccc\naaa\nccc\naaa\nbbb\nccc" | sed '/aaa/!d' | sed '$!d' #In which order and amount of aaa, bb, ccc, ..., nnn is optional

上面的例子效果很好。第二种方法:

echo -e "aaa\nbbb\nccc\naaa\nccc\naaa\nbbb\nccc" | sed -e '/aaa/!d' -e '$!d'

或者:

echo -e "aaa\nbbb\nccc\naaa\nccc\naaa\nbbb\nccc" | sed -e '/aaa/!d;$!d'

第二种方法不需要我工作。维基百科有人写到 sed 可以组合。我不想工作。我做错了什么并且我理解?正确的样子应该是什么样子?

最佳答案

这可能对你有用(GNU sed):

sed '/aaa/h;$!d;x' file

要捕获最后一个匹配项,您必须将其存储在保留空间中,然后在文件末尾检索它。

关于regex - sed:在匹配之前显示行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16829457/

相关文章:

bash - 如何在不执行命令的情况下将命令添加到 bash 历史记录?

arrays - 将 `ByVal` 参数传递给 Regex 函数会导致代码非常慢,尽管使用 Array

java - 使用 String.replaceAll 进行简单洗牌的正则表达式

javascript - 如何使用正则表达式解析标签?

javascript - 在 javascript 中查找正则表达式电话号码并将其替换为可调用链接

Linux删除脚本

c++ - 如何编译并运行一个hello world JUCE程序?

bash - [ : missing `]' in bash script

linux - 如何判断正在运行的 Linux 机器是否空闲

linux - 将完整的 bash 脚本行传递给另一个 bash 函数以执行