我创建了一个名为“清除”的脚本文件,其中包含一系列正则表达式,用于清除ed文件(S)中的空格、尾随空格、空白行等。我按以下方式运行它:
ed [name-of-file] < [name-of-script]有时,我想从ed中运行当前正在编辑的文件上的脚本。我不确定我需要这样做的语法。
下面是一个示例脚本:
g/^ */s///
# Remove blank spaces at the beginning of a line
g/ *$/s///
# Remove trailing whitespace at end of line
g/ */s// /g
# Remove additional spaces between words
g/^$/d
# delete blank lines
g/\(‘‘\|’’\)/s//"/g
# Remove curly braces
g/\(“\|”\)/s//"/g
g/\(‘\|’\)/s//'/g
# idem
,p
Q发布于 2021-07-14 14:59:38
你可能需要
e !ed -s % 如果脚本以输出修改后的编辑缓冲区结束,即如果脚本以,p和Q结尾。这将用!之后的命令输出替换当前编辑缓冲区的内容。命令中的%将自动替换为当前文件的名称(此命令不会更改当前文件的名称)。
只需首先记住w,以便生成的ed在此之前看到您的编辑。
(这似乎不适用于示例脚本,但是.)如果脚本对文件进行就地编辑,以便在文件末尾将文件保存回磁盘,则使用
!ed -s % </pre><div>这将在shell中执行<code>ed</code>命令,然后用更新的文件内容替换当前的编辑缓冲区。再说一遍,不要忘了先<code>w</code>。</div><div>进一步解释:</div><div><code>e !somecommand</code>命令丢弃当前编辑缓冲区,并将其替换为<code>somecommand</code>的输出。</div><div>这意味着,如果<code>e !ed -s % <script</code>编辑脚本在标准输出上输出最终结果,那么<code>script</code>将是合适的,并且您希望编辑该输出。</div><div>没有进一步的参数,<code>e</code>命令将重新打开当前文件,并用该文件的内容替换编辑缓冲区。如果前面是<code>!somecommand</code>,<code>somecommand</code>将更改当前文件,那么您将如何将这些更改合并到编辑会话中。</div><div>这意味着,如果<code>!ed -s % <script</code>编辑脚本将修改后的文档保存回相同的名称(而不是将其写入标准输出),那么您可能希望使用<code>e</code>后面的<code>script</code>。</div>https://unix.stackexchange.com/questions/658369
复制相似问题