擅长:python、mysql、java
<p>简单:</p>
<pre><code>sed '1{x;d};$H;/regexp/{x;s/^/\n/;b};x'
</code></pre>
<p>描述一下</p>
<pre><code>#!/bin/sed
# trick is juggling previous and current line in hold and pattern space
1 { # at firs line
x # place first line to hold space
d # skip to end and avoid printing
}
$H # append last line to hold space to force print
/regexp/ { # regexp found (in current line - pattern space)
x # swap previous and current line between hold and pattern space
s/^/\n/ # prepend line break before previous line
b # jump at end of script which cause print previous line
}
x # if regexp does not match just swap previous and current line to print previous one
</code></pre>
<p><strong>编辑</strong>:稍微简单一点的版本。</p>
<pre><code>sed '$H;/regexp/{x;s/^/\n/;b};x;1d'
</code></pre>