从 ed 中运行 ed 脚本

从 ed 中运行 ed 脚本

我创建了一个名为“cleanup”的脚本文件,其中包含一系列正则表达式,用于清理 ed 文件中的空格、尾随空格、空行等。我按如下方式运行它:

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

答案1

你可能会使用

e !ed -s % <script

如果脚本以输出修改后的编辑缓冲区结束,即如果脚本以,p和结尾Q。这会将当前编辑缓冲区的内容替换为 after 的命令的输出!。命令中的%会自动替换为当前文件名(该命令不会改变当前文件名)。

请记住w首先这样做,以便生成的人ed可以看到您在此之前所做的编辑。

(这似乎不适用于您的示例脚本,但是...)如果脚本对文件进行就地编辑,以便文件最后保存回磁盘,则使用

!ed -s % <script
e

这会ed在 shell 中执行您的命令,然后用更新的文件内容替换当前编辑缓冲区。再次强调,不要忘记w首先。


进一步解释:

e !somecommand命令丢弃当前编辑缓冲区并将其替换为 的输出somecommand

这意味着如果编辑脚本在标准输出上输出最终结果,并且您想要编辑该输出,那么这将e !ed -s % <script是合适的。script

e命令不带进一步的参数,重新打开当前文件并用该文件的内容替换编辑缓冲区。如果这前面是!somecommandwheresomecommand 更改当前文件,那么这就是将这些更改合并到编辑会话中的方法。

这意味着如果编辑脚本将修改后的文档保存回相同的名称(而不是将其写入标准输出),则您可能需要使用!ed -s % <script后面的内容。escript

相关内容