Files
reference/docs/sed.html
2025-05-11 17:34:02 +00:00

401 lines
32 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" data-color-mode="dark">
<head>
<meta charset="utf-8">
<title>Sed 备忘清单
&#x26; sed cheatsheet &#x26; Quick Reference</title>
<meta content="width=device-width, initial-scale=1" name="viewport">
<meta description="Sed 是一个流编辑器,此 Sed 备忘清单包含 Sed 命令和一些常见的 Sed 技巧。
入门,为开发人员分享快速参考备忘单。">
<meta keywords="sed,reference,Quick,Reference,cheatsheet,cheat,sheet">
<meta name="author" content="jaywcjlove">
<meta name="license" content="MIT">
<meta name="funding" content="https://jaywcjlove.github.io/#/sponsor">
<meta rel="apple-touch-icon" href="../icons/touch-icon-iphone.png">
<meta rel="apple-touch-icon" sizes="152x152" href="../icons/touch-icon-ipad.png">
<meta rel="apple-touch-icon" sizes="180x180" href="../icons/touch-icon-iphone.png">
<meta rel="apple-touch-icon" sizes="167x167" href="../icons/touch-icon-ipad-retina.png">
<meta rel="apple-touch-icon" sizes="120x120" href="../icons/touch-icon-iphone-retina.png">
<link rel="icon" href="../icons/favicon.svg" type="image/svg+xml">
<link href="../style/style.css" rel="stylesheet">
<link href="../style/katex.css" rel="stylesheet">
</head>
<body><nav class="header-nav"><div class="max-container"><a href="../index.html" class="logo"><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" height="1em" width="1em">
<path d="m21.66 10.44-.98 4.18c-.84 3.61-2.5 5.07-5.62 4.77-.5-.04-1.04-.13-1.62-.27l-1.68-.4c-4.17-.99-5.46-3.05-4.48-7.23l.98-4.19c.2-.85.44-1.59.74-2.2 1.17-2.42 3.16-3.07 6.5-2.28l1.67.39c4.19.98 5.47 3.05 4.49 7.23Z" fill="#c9d1d9"></path>
<path d="M15.06 19.39c-.62.42-1.4.77-2.35 1.08l-1.58.52c-3.97 1.28-6.06.21-7.35-3.76L2.5 13.28c-1.28-3.97-.22-6.07 3.75-7.35l1.58-.52c.41-.13.8-.24 1.17-.31-.3.61-.54 1.35-.74 2.2l-.98 4.19c-.98 4.18.31 6.24 4.48 7.23l1.68.4c.58.14 1.12.23 1.62.27Zm2.43-8.88c-.06 0-.12-.01-.19-.02l-4.85-1.23a.75.75 0 0 1 .37-1.45l4.85 1.23a.748.748 0 0 1-.18 1.47Z" fill="#228e6c"></path>
<path d="M14.56 13.89c-.06 0-.12-.01-.19-.02l-2.91-.74a.75.75 0 0 1 .37-1.45l2.91.74c.4.1.64.51.54.91-.08.34-.38.56-.72.56Z" fill="#228e6c"></path>
</svg>
<span class="title">Quick Reference</span></a><div class="menu"><a href="javascript:void(0);" class="searchbtn" id="searchbtn"><svg xmlns="http://www.w3.org/2000/svg" height="1em" width="1em" viewBox="0 0 18 18">
<path fill="currentColor" d="M17.71,16.29 L14.31,12.9 C15.4069846,11.5024547 16.0022094,9.77665502 16,8 C16,3.581722 12.418278,0 8,0 C3.581722,0 0,3.581722 0,8 C0,12.418278 3.581722,16 8,16 C9.77665502,16.0022094 11.5024547,15.4069846 12.9,14.31 L16.29,17.71 C16.4777666,17.8993127 16.7333625,18.0057983 17,18.0057983 C17.2666375,18.0057983 17.5222334,17.8993127 17.71,17.71 C17.8993127,17.5222334 18.0057983,17.2666375 18.0057983,17 C18.0057983,16.7333625 17.8993127,16.4777666 17.71,16.29 Z M2,8 C2,4.6862915 4.6862915,2 8,2 C11.3137085,2 14,4.6862915 14,8 C14,11.3137085 11.3137085,14 8,14 C4.6862915,14 2,11.3137085 2,8 Z"></path>
</svg><span>搜索</span><span>⌘K</span></a><a href="https://github.com/jaywcjlove/reference/blob/main/docs/sed.md" class="edit" target="__blank"><svg viewBox="0 0 36 36" fill="currentColor" height="1em" width="1em"><path d="m33 6.4-3.7-3.7a1.71 1.71 0 0 0-2.36 0L23.65 6H6a2 2 0 0 0-2 2v22a2 2 0 0 0 2 2h22a2 2 0 0 0 2-2V11.76l3-3a1.67 1.67 0 0 0 0-2.36ZM18.83 20.13l-4.19.93 1-4.15 9.55-9.57 3.23 3.23ZM29.5 9.43 26.27 6.2l1.85-1.85 3.23 3.23Z"></path><path fill="none" d="M0 0h36v36H0z"></path></svg><span>编辑</span></a><button id="darkMode" type="button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="light" height="1em" width="1em">
<path d="M6.995 12c0 2.761 2.246 5.007 5.007 5.007s5.007-2.246 5.007-5.007-2.246-5.007-5.007-5.007S6.995 9.239 6.995 12zM11 19h2v3h-2zm0-17h2v3h-2zm-9 9h3v2H2zm17 0h3v2h-3zM5.637 19.778l-1.414-1.414 2.121-2.121 1.414 1.414zM16.242 6.344l2.122-2.122 1.414 1.414-2.122 2.122zM6.344 7.759 4.223 5.637l1.415-1.414 2.12 2.122zm13.434 10.605-1.414 1.414-2.122-2.122 1.414-1.414z"></path>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24" class="dark" height="1em" width="1em">
<path d="M12 11.807A9.002 9.002 0 0 1 10.049 2a9.942 9.942 0 0 0-5.12 2.735c-3.905 3.905-3.905 10.237 0 14.142 3.906 3.906 10.237 3.905 14.143 0a9.946 9.946 0 0 0 2.735-5.119A9.003 9.003 0 0 1 12 11.807z"></path>
</svg>
</button><script src="../js/dark.js?v=1.8.3"></script><a href="https://github.com/jaywcjlove/reference" class="" target="__blank"><svg viewBox="0 0 16 16" fill="currentColor" height="1em" width="1em"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path></svg></a></div></div></nav><div class="wrap h1body-exist max-container"><header class="wrap-header h1wrap"><h1 id="sed-备忘清单"><svg viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" height="1em" width="1em">
<path d="M5 3a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h4.22l.212-.845c.013-.052.027-.104.043-.155H5a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v4.232c.32-.137.659-.213 1-.229V5a2 2 0 0 0-2-2H5Zm4.5 11h1.443l1-1H9.5a.5.5 0 0 0 0 1Zm-2-6.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0ZM6.75 11a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm0 3a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5ZM9.5 7a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1h-4Zm0 3a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1h-4Zm1.48 5.377 4.83-4.83a1.87 1.87 0 1 1 2.644 2.646l-4.83 4.829a2.197 2.197 0 0 1-1.02.578l-1.498.374a.89.89 0 0 1-1.079-1.078l.375-1.498a2.18 2.18 0 0 1 .578-1.02Z" fill="currentColor"></path>
</svg>
<a aria-hidden="true" tabindex="-1" href="#sed-备忘清单"><span class="icon icon-link"></span></a>Sed 备忘清单</h1><div class="wrap-body">
<p>Sed 是一个流编辑器,此 Sed 备忘清单包含 Sed 命令和一些常见的 Sed 技巧。</p>
</div></header><div class="menu-tocs"><div class="menu-btn"><svg aria-hidden="true" fill="currentColor" height="1em" width="1em" viewBox="0 0 16 16" version="1.1" data-view-component="true">
<path fill-rule="evenodd" d="M2 4a1 1 0 100-2 1 1 0 000 2zm3.75-1.5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zm0 5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zm0 5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zM3 8a1 1 0 11-2 0 1 1 0 012 0zm-1 6a1 1 0 100-2 1 1 0 000 2z"></path>
</svg></div><div class="menu-modal"><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#入门">入门</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#sed-用法">Sed 用法</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#选项示例">选项示例</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#多个命令">多个命令</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#sed-脚本">Sed 脚本</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#examples">Examples</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#sed-命令">Sed 命令</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#命令">命令</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#空间命令">空间命令</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#flags">Flags</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#循环命令">循环命令</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#杂项标志">杂项标志</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#sed-示例">Sed 示例</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#替换文本">替换文本</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#搜索文本">搜索文本</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#追加行">追加行</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#编号">编号</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#前置行">前置行</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#删除行">删除行</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#文件间距">文件间距</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#另见">另见</a></div></div><div class="h1wrap-body"><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="入门"><a aria-hidden="true" tabindex="-1" href="#入门"><span class="icon icon-link"></span></a>入门</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="sed-用法"><a aria-hidden="true" tabindex="-1" href="#sed-用法"><span class="icon icon-link"></span></a>Sed 用法</h3><div class="wrap-body">
<p>语法</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token punctuation">[</span>options<span class="token punctuation">]</span> <span class="token builtin class-name">command</span> <span class="token punctuation">[</span>input-file<span class="token punctuation">]</span>
</span></code></pre>
<p>带管道</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">cat</span> report.txt <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'s/Nick/John/g'</span>
</span></code></pre>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token builtin class-name">echo</span> <span class="token string">'123abc'</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'s/[0-9]+//g'</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="选项示例"><a aria-hidden="true" tabindex="-1" href="#选项示例"><span class="icon icon-link"></span></a>选项示例</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<table class="show-header"><thead><tr><th>参数</th><th>示例</th><th>描述</th></tr></thead><tbody><tr><td><code>-i</code></td><td>sed -ibak 's/On/Off/' php.ini</td><td>直接备份和修改输入文件</td></tr><tr><td><code>-E</code></td><td>sed -E 's/[0-9]+//g' input-file</td><td>使用扩展正则表达式</td></tr><tr><td><code>-n</code></td><td>sed -n '3 p' config.conf</td><td>禁止默认图案空间打印</td></tr><tr><td><code>-f</code></td><td>sed -f script.sed config.conf</td><td>执行 sed 脚本文件</td></tr><tr><td><code>-e</code></td><td>sed -e 'command1' -e 'command2' input-file</td><td>执行多个 sed 命令</td></tr></tbody></table>
<!--rehype:className=show-header-->
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="多个命令"><a aria-hidden="true" tabindex="-1" href="#多个命令"><span class="icon icon-link"></span></a>多个命令</h3><div class="wrap-body">
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token builtin class-name">echo</span> <span class="token string">"hello world"</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token parameter variable">-e</span> <span class="token string">'s/h/H/g'</span> <span class="token parameter variable">-e</span> <span class="token string">'s/w/W/g'</span>
</span><span class="code-line">Hello World
</span></code></pre>
<p>使用 <code>-e</code> 执行多个 sed 命令</p>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="sed-脚本"><a aria-hidden="true" tabindex="-1" href="#sed-脚本"><span class="icon icon-link"></span></a>Sed 脚本</h3><div class="wrap-body">
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token builtin class-name">echo</span> <span class="token string">'s/h/H/g'</span> <span class="token operator">>></span> hello.sed
</span><span class="code-line">$ <span class="token builtin class-name">echo</span> <span class="token string">'s/w/W/g'</span> <span class="token operator">>></span> hello.sed
</span><span class="code-line">$ <span class="token builtin class-name">echo</span> <span class="token string">"hello world"</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token parameter variable">-f</span> hello.sed
</span><span class="code-line">Hello World
</span></code></pre>
<p>使用 <code>-f</code> 执行 sed 脚本文件</p>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="examples"><a aria-hidden="true" tabindex="-1" href="#examples"><span class="icon icon-link"></span></a>Examples</h3><div class="wrap-body">
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'s/old/new/g'</span> file.txt
</span><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'s/old/new/g'</span> file.txt <span class="token operator">></span> new.txt
</span><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'s/old/new/g'</span> <span class="token parameter variable">-i</span> file.txt
</span><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'s/old/new/g'</span> <span class="token parameter variable">-i.backup</span> file.txt
</span></code></pre>
</div></div></div></div></div><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="sed-命令"><a aria-hidden="true" tabindex="-1" href="#sed-命令"><span class="icon icon-link"></span></a>Sed 命令</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="命令"><a aria-hidden="true" tabindex="-1" href="#命令"><span class="icon icon-link"></span></a>命令</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<table class="show-header"><thead><tr><th align="left">命令</th><th align="left">示例</th><th align="left">描述</th></tr></thead><tbody><tr><td align="left"><code>p</code></td><td align="left">sed -n '1,4 p' input.txt</td><td align="left">打印第 1-4 行</td></tr><tr><td align="left"><code>p</code></td><td align="left">sed -n -e '1,4 p' -e '6,7 p' input.txt</td><td align="left">打印第 1-4 行和第 6-7 行</td></tr><tr><td align="left"><code>d</code></td><td align="left">sed '1,4 d' input.txt</td><td align="left">打印除 1-4 之外的行</td></tr><tr><td align="left"><code>w</code></td><td align="left">sed -n '1,4 w output.txt' input.txt</td><td align="left">将模式空间写入文件</td></tr><tr><td align="left"><code>a</code></td><td align="left">sed '2 a new-line' input.txt</td><td align="left">在后面追加一行</td></tr><tr><td align="left"><code>i</code></td><td align="left">sed '2 i new-line' input.txt</td><td align="left">在前面插入行</td></tr></tbody></table>
<!--rehype:className=show-header-->
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="空间命令"><a aria-hidden="true" tabindex="-1" href="#空间命令"><span class="icon icon-link"></span></a>空间命令</h3><div class="wrap-body">
<table><thead><tr><th align="left">命令</th><th align="left">描述</th></tr></thead><tbody><tr><td align="left"><code>n</code></td><td align="left">打印模式空间,空模式空间,读取下一行</td></tr><tr><td align="left"><code>x</code></td><td align="left">用保持空间交换模式空间</td></tr><tr><td align="left"><code>h</code></td><td align="left">复制模式空间以保持空间</td></tr><tr><td align="left"><code>H</code></td><td align="left">追加模式空间以保持空间</td></tr><tr><td align="left"><code>g</code></td><td align="left">将保持空间复制到模式空间</td></tr><tr><td align="left"><code>G</code></td><td align="left">将保持空间附加到模式空间</td></tr></tbody></table>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="flags"><a aria-hidden="true" tabindex="-1" href="#flags"><span class="icon icon-link"></span></a>Flags</h3><div class="wrap-body">
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'s/old/new/[flags]'</span> <span class="token punctuation">[</span>input-file<span class="token punctuation">]</span>
</span></code></pre>
<hr>
<table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td><code>g</code></td><td>全球替代</td></tr><tr><td><code>1,2...</code></td><td>替换第 n 次出现</td></tr><tr><td><code>p</code></td><td>仅打印替换的行</td></tr><tr><td><code>w</code></td><td>仅将替换的行写入文件</td></tr><tr><td><code>I</code></td><td>搜索时忽略大小写</td></tr><tr><td><code>e</code></td><td>在命令行中替换并执行</td></tr></tbody></table>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="循环命令"><a aria-hidden="true" tabindex="-1" href="#循环命令"><span class="icon icon-link"></span></a>循环命令</h3><div class="wrap-body">
<table><thead><tr><th>Command</th><th>Description</th></tr></thead><tbody><tr><td><code>b label</code></td><td>分支到标签(用于循环)</td></tr><tr><td><code>t label</code></td><td>仅在成功替换时分支到标签(用于循环)</td></tr><tr><td><code>:label</code></td><td>b 和 t 命令的标签(用于循环)</td></tr><tr><td><code>N</code></td><td>将下一行追加到模式空间</td></tr><tr><td><code>P</code></td><td>多行打印第一行</td></tr><tr><td><code>D</code></td><td>删除多行中的第一行</td></tr></tbody></table>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="杂项标志"><a aria-hidden="true" tabindex="-1" href="#杂项标志"><span class="icon icon-link"></span></a>杂项标志</h3><div class="wrap-body">
<table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td><code>/ | ^ @ ! #</code></td><td>替换分隔符可以是任何字符</td></tr><tr><td><code>&#x26;</code></td><td>获取匹配的模式</td></tr><tr><td><code>( ) \1 \2 \3</code></td><td>使用 <code>(</code><code>)</code> 进行分组。<br>使用 <code>\1</code><code>\2</code> 替换来引用组</td></tr></tbody></table>
</div></div></div></div></div><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="sed-示例"><a aria-hidden="true" tabindex="-1" href="#sed-示例"><span class="icon icon-link"></span></a>Sed 示例</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist row-span-2"><div class="wrap-header h3wrap"><h3 id="替换文本"><a aria-hidden="true" tabindex="-1" href="#替换文本"><span class="icon icon-link"></span></a>替换文本</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<p>替换所有出现的字符串</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'s/old/new/g'</span> file.txt
</span></code></pre>
<p>仅替换第 n 次出现的字符串</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'s/old/new/2'</span> file.txt
</span></code></pre>
<p>仅在第 5 行替换替换字符串</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'5 s/old/new/'</span> file.txt
</span></code></pre>
<p>将“world”替换为“universe”但前提是该行以“hello”开头</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'/hello/s/world/universe/'</span> file.txt
</span></code></pre>
<p>从每行的末尾删除“\”</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'s/\\$//'</span> file.txt
</span></code></pre>
<p>删除每行开头的所有空格</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'s/^\s*//'</span> file.txt
</span></code></pre>
<p>删除评论。 即使是那些在行尾的</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'s/#.*$//'</span> file.txt
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="搜索文本"><a aria-hidden="true" tabindex="-1" href="#搜索文本"><span class="icon icon-link"></span></a>搜索文本</h3><div class="wrap-body">
<p>搜索字符串并仅打印匹配的行</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token parameter variable">-n</span> <span class="token string">'/hello/p'</span> file.txt
</span></code></pre>
<p>不区分大小写的搜索</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token parameter variable">-n</span> <span class="token string">'/hello/Ip'</span> file.txt
</span></code></pre>
<p>搜索字符串,但仅输出不匹配的行</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token parameter variable">-n</span> <span class="token string">'/hello/!p'</span> file.txt
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="追加行"><a aria-hidden="true" tabindex="-1" href="#追加行"><span class="icon icon-link"></span></a>追加行</h3><div class="wrap-body">
<p>在第 2 行之后追加一行</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'2a Text after line 2'</span> file.txt
</span></code></pre>
<p>在文件末尾追加一行</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'$a THE END!'</span> file.txt
</span></code></pre>
<p>从第 3 行开始,每 3 行后追加一行</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'3~3a Some text'</span> file.txt
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="编号"><a aria-hidden="true" tabindex="-1" href="#编号"><span class="icon icon-link"></span></a>编号</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<p>文件的数字行(简单的左对齐)</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token operator">=</span> file.txt <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'N;s/\n/\t/'</span>
</span></code></pre>
<p>文件的数字行(数字在左,右对齐)</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token operator">=</span> file.txt <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'N; s/^/ /; s/ *\(.\{6,\}\)\n/\1 /'</span>
</span></code></pre>
<p>文件的数字行,但如果行不为空,则仅打印数字</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'/./='</span> file.txt <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'/./N; s/\n/ /'</span>
</span></code></pre>
<p>计算行数模拟“wc -l”</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token parameter variable">-n</span> <span class="token string">'$='</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="前置行"><a aria-hidden="true" tabindex="-1" href="#前置行"><span class="icon icon-link"></span></a>前置行</h3><div class="wrap-body">
<p>在第 5 行之前插入文本</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'5i line number five'</span> file.txt
</span></code></pre>
<p>在包含“hello”的每一行之前插入“示例</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'/hello/i Example: '</span> file.txt
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="删除行"><a aria-hidden="true" tabindex="-1" href="#删除行"><span class="icon icon-link"></span></a>删除行</h3><div class="wrap-body">
<p>删除文件中的第 5-7 行</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'5,7d'</span> file.txt
</span></code></pre>
<p>删除从第 3 行开始的每 2 行</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'3~2d'</span> file.txt
</span></code></pre>
<p>删除文件的最后一行</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'$d'</span> file.txt
</span></code></pre>
<p>删除以“Hello”开头的行</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'/^Hello/d'</span> file.txt
</span></code></pre>
<p>删除所有空行</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'/^$/d'</span> file.txt
</span></code></pre>
<p>删除以“#”开头的行</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'/^#/d'</span> file.txt
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="文件间距"><a aria-hidden="true" tabindex="-1" href="#文件间距"><span class="icon icon-link"></span></a>文件间距</h3><div class="wrap-body">
<p>双倍行距</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> G
</span></code></pre>
<p>删除所有空行和双空格</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'/^$/d;G'</span>
</span></code></pre>
<p>三倍空间文件</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'G;G'</span>
</span></code></pre>
<p>撤消双倍行距</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'n;d'</span>
</span></code></pre>
<p>在匹配“正则表达式”的行上方插入一个空行</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'/regex/{x;p;x;}'</span>
</span></code></pre>
<p>在匹配“正则表达式”的行下方插入一个空行</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'/regex/G'</span>
</span></code></pre>
<p>在匹配“正则表达式”的行周围插入一个空行</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">sed</span> <span class="token string">'/regex/{x;p;x;G;}'</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap h2body-not-exist"><div class="wrap-header h2wrap"><h2 id="另见"><a aria-hidden="true" tabindex="-1" href="#另见"><span class="icon icon-link"></span></a>另见</h2><div class="wrap-body">
<ul>
<li><a href="https://gist.github.com/ssstonebraker/6140154">sed 备忘单</a> <em>(gist.github.com)</em></li>
</ul>
</div></div><div class="h2wrap-body"></div></div></div><script src="https://giscus.app/client.js" data-repo="jaywcjlove/reference" data-repo-id="R_kgDOID2-Mw" data-category="Q&#x26;A" data-category-id="DIC_kwDOID2-M84CS5wo" data-mapping="pathname" data-strict="0" data-reactions-enabled="1" data-emit-metadata="0" data-input-position="bottom" data-theme="dark" data-lang="zh-CN" crossorigin="anonymous" async></script><div class="giscus"></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 <a href="https://wangchujiang.com/#/app" target="_blank">Kenny Wang</a>.</footer></footer><script src="../data.js?v=1.8.3" defer></script><script src="../js/fuse.min.js?v=1.8.3" defer></script><script src="../js/main.js?v=1.8.3" defer></script><div id="mysearch"><div class="mysearch-box"><div class="mysearch-input"><div><svg xmlns="http://www.w3.org/2000/svg" height="1em" width="1em" viewBox="0 0 18 18">
<path fill="currentColor" d="M17.71,16.29 L14.31,12.9 C15.4069846,11.5024547 16.0022094,9.77665502 16,8 C16,3.581722 12.418278,0 8,0 C3.581722,0 0,3.581722 0,8 C0,12.418278 3.581722,16 8,16 C9.77665502,16.0022094 11.5024547,15.4069846 12.9,14.31 L16.29,17.71 C16.4777666,17.8993127 16.7333625,18.0057983 17,18.0057983 C17.2666375,18.0057983 17.5222334,17.8993127 17.71,17.71 C17.8993127,17.5222334 18.0057983,17.2666375 18.0057983,17 C18.0057983,16.7333625 17.8993127,16.4777666 17.71,16.29 Z M2,8 C2,4.6862915 4.6862915,2 8,2 C11.3137085,2 14,4.6862915 14,8 C14,11.3137085 11.3137085,14 8,14 C4.6862915,14 2,11.3137085 2,8 Z"></path>
</svg><input id="mysearch-input" type="search" placeholder="搜索" autocomplete="off"><div class="mysearch-clear"></div></div><button id="mysearch-close" type="button">搜索</button></div><div class="mysearch-result"><div id="mysearch-menu"></div><div id="mysearch-content"></div></div></div></div></body>
</html>