我创建了一个名为“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
命令不带进一步的参数,重新打开当前文件并用该文件的内容替换编辑缓冲区。如果这前面是!somecommand
wheresomecommand
更改当前文件,那么这就是将这些更改合并到编辑会话中的方法。
这意味着如果编辑脚本将修改后的文档保存回相同的名称(而不是将其写入标准输出),则您可能需要使用!ed -s % <script
后面的内容。e
script