鉴于以下ed脚本,
$ cat helloworld
a
hello
world
.
,n
,s,o,O,g
,n
Q
Run Code Online (Sandbox Code Playgroud)
我想以某种方式获得交互式输出
$ ed
a
hello
world
.
,n
1 hello
2 world
,s,o,O,g
,n
1 hellO
2 wOrld
Q
$
Run Code Online (Sandbox Code Playgroud)
而不是预期的
$ cat helloworld | ed
1 hello
2 world
1 hellO
2 wOrld
$
Run Code Online (Sandbox Code Playgroud)
这可能吗,也许使用第三方实用程序?提前致谢!
编辑:我想我应该增加一些动力。我想制作一些示例 ed 会话,并可能将它们保存为script(1). 如果此过程是“实时”执行的,则任何修改基本上都意味着再次键入整个教程(不好)或“弄清楚”输出,这可能是基于长时间的编辑会话(更糟)。
好吧,在胡闹之后,这就是我要使用的:
awk '{ print; system("sleep 0") }' edscript | tee /dev/tty | ed
Run Code Online (Sandbox Code Playgroud)
或者,没有tee:
awk '{ print >"/dev/stderr"; print | "ed"; system("sleep 0") }' edscript
Run Code Online (Sandbox Code Playgroud)
如果print >"/dev/stderr"在您的系统上不起作用,您可以使用print | "cat >&2".
和gnu sed:
sed -u -n -e 'p;w /dev/stderr' -e 's|.*||e' edscript | ed
Run Code Online (Sandbox Code Playgroud)
另一种同样有效的方法:
用于在每一行上split分割您的edscript :
split -l1 edscript
Run Code Online (Sandbox Code Playgroud)
这将产生类似xaa,xab...的作品xah。
然后你可以像这样使用这些部分:
for i in x*; do awk '{ print >"/dev/stderr"; print }' $i; done | ed
Run Code Online (Sandbox Code Playgroud)
或者
for i in x*; do sed -n -e 'p;w /dev/stderr' $i; done | ed
Run Code Online (Sandbox Code Playgroud)
以获得预期的结果。然后你rm x*...
| 归档时间: |
|
| 查看次数: |
505 次 |
| 最近记录: |