我很vi
清楚。当我在命令行上进行操作时,我真的很想使用它。
有没有一种简单的方法可以将进程的标准输出传输到无头版本的 vi 之类的东西中,然后传输到标准输出?
像这样的东西:
$ uname -a | <headless_vi> "3f D"
Linux robbie 4.8.13-1-ARCH
答案1
正如 @JdeBP 指出的,您最好使用sed
流编辑器,或者甚至只是cut
:
$ uname -a | cut -d ' ' -f 1-3
OpenBSD box 6.0
或者,如果你完全删掉剪辑,
$ uname -snr
OpenBSD box 6.0
问题vi
是它没有流编辑模式。行编辑器ex
做有一个“批处理模式”,但很少使用,而且它像任何其他行编辑器一样,不能在一行上“来回移动光标”。
sed
是行编辑器的流编辑器版本ed
,专门用于将编辑脚本应用于流。该vi
编辑器是行编辑器的屏幕编辑器版本ex
,并且ex
编辑器是ed
.
命令vi
序列将移动到一行上的3f␣
第三个(空格),下面的命令将删除该行的其余部分。如果您有屏幕编辑功能,那就很方便了。␣
D
在ed
、sed
和中ex
,您可以添加行、删除行或更改行,其中“行”表示“一次整行”。要在ed
or中执行相同的操作ex
,假设我们位于缓冲区中的正确行,您会说...好吧,您必须制作正则表达式模式和替换字符串,并将它们与s
编辑命令一起使用来更改线,在这种情况下是不平凡的。
对于sed
,这将采取以下形式
$ uname -a | sed 's/PATTERN/REPLACEMENT/'