grep 匹配前一行加上匹配

Ran*_*han 9 grep sed awk text-processing

zzzzzzzzz
aaaaaaaaa
bbbbbbbbb &
ccccccccc &
ddddddddd
hhhhhhhhh
eeeeeeeee
fffffffff &
ggggggggg &
Run Code Online (Sandbox Code Playgroud)

在上面的线,我想要的是grep/ sed/ awk(任何方法都可以)有行&标志加在它们上面一行。因此,例如所需的输出将如下所示:

aaaaaaaaa
bbbbbbbbb &
ccccccccc &
eeeeeeeee
fffffffff &
ggggggggg &
Run Code Online (Sandbox Code Playgroud)

以下是我在没有运气的情况下尝试过的。

egrep "&" | -b 1 file.txt
Run Code Online (Sandbox Code Playgroud)

Jos*_* R. 19

你可以做:

grep -B 1 '&$' your_file
Run Code Online (Sandbox Code Playgroud)

这将查找以&, remove结尾的行$以匹配其中&任何位置的行。

-B开关告诉grep到线那场比赛之前来输出“上下文”线。在这种情况下,由于您需要一行上下文,因此需要-B 1.

此开关在 GNU 中可用,grep但不在 POSIX 标准中。

这是一个简单的sed解决方案,在您没有 GNU 的情况下应该会有所帮助grep

sed -n '/&/!N;/&/p' your_file
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

  • -n开关抑制了默认的“打印”操作sed
  • /&/!N意思是:如果当前行不包含&,则将下一行附加到模式空间。
  • /&/p意思是:匹配&并打印模式空间。

  • @RanaKhan 欢迎使用 Stack Exchange :) 很高兴能帮到你。如果此答案有助于解决您的问题,请不要忘记将此答案标记为已接受(使用答案旁边的投票按钮下方的勾号),以便其他浏览网站的人知道此问题已解决。 (2认同)