这里需要一些基本的unix shell:
对于我看不到“ - ”目标的命令,比如编辑:
print '%-2p\nq' | ed -s FILE
我可以从某个cmd的stdout而不是FILE名称提供一个流作为要处理的数据:
SomeCMD | ed -s SOMETHING_MAGICAL <<< 'print '%-2p\nq'
有可能吗?
答案 0 :(得分:8)
ed 从stdin读取它的命令,所以如果你的文件也在stdin上,你怎么工作?
事实上,如果你将输出连接到一行,可以通过stdin输入文件输入
i
一开始,要开始写入数据,然后附加一个。来结束输入,然后是任何命令。您甚至可以将结果输出到stdout。请记住,如果文件中只有一行,只有一个。,它就会中断。
因此,如果文件 input.file 包含:
First line
Second line
Third line
文件 commands.list 包含以下内容:
.
1d
1,$w /dev/stdout
然后这个命令行......
echo i | cat - input.file commands.list | ed -s
将输出:
Second line
Third line
我敢说 tadaaaaa!?
注意:您可以防止文件中单个。行的情况,方法是将文件通过一个过滤掉任何此类行的过滤器,然后再使用 ed 命令。我把它留给你的聪明才智。
另一个注意事项:你真的应该使用 sed ,但我不能让无法完成评论。
答案 1 :(得分:2)
使用r
将命令输出读入文本缓冲区。所以,便携式:
printf '%s\n' 'r !df -h' g/tmpfs/d ,p q | ed -s
或
ed -s << IN
r !df -h
g/tmpfs/d
,p
q
IN
以上读取df -h
的输出,删除与tmpfs
匹配的行并打印结果。
如果您的shell支持进程替换:
printf '%s\n' g/tmpfs/d ,p q | ed -s <(df -h)
gnu ed
SOMETHING_MAGICAL
被称为!
根据{{1}}页面:
通过阅读&#39;文件&#39>开始编辑如果给予。如果&#39; file&#39;以a开头 &#39;!&#39;,读取shell命令的输出。
man
或者,使用 herestring :
printf '%s\n' g/tmpfs/d ,p q | ed -s '!df -h'