如何为需要文件名的ed提供stdin?

Mea*_*lpa 3 unix linux shell ed

这里需要一些基本的unix shell:

对于我看不到" - "目标的命令,比如ed:

print '%-2p\nq' | ed -s FILE
Run Code Online (Sandbox Code Playgroud)

我可以从某个cmd的stdout而不是FILE名称提供一个流作为要处理的数据:

SomeCMD | ed -s SOMETHING_MAGICAL <<< 'print '%-2p\nq'
Run Code Online (Sandbox Code Playgroud)

有可能吗?

its*_*uce 8

ed从stdin读取它的命令,所以如果你的文件也在stdin上,你怎么工作?

事实上,你可以养活文件输入标准输入,如果您连接它的输出与单行

i
Run Code Online (Sandbox Code Playgroud)

在开始时,开始写入数据,然后附加一个.结束输入,然后是任何命令.您甚至可以将结果输出到stdout.请记住,如果文件中只有一行,只有一行,它就会中断.在里面.

所以如果文件input.file包含这个:

First line
Second line
Third line
Run Code Online (Sandbox Code Playgroud)

一个文件commands.list包含这个:

.
1d
1,$w /dev/stdout
Run Code Online (Sandbox Code Playgroud)

然后这个命令行......

echo i | cat - input.file commands.list | ed -s
Run Code Online (Sandbox Code Playgroud)

输出这个:

Second line
Third line
Run Code Online (Sandbox Code Playgroud)

我敢说tadaaaaa!

注意:你可以防止单一的情况.文件中的行通过一个过滤掉任何这样的行的过滤器来管理文件,然后用ed命令再次取消它们.我把它留给你的聪明才智.

另一个注意事项:你真的应该使用sed这个,但我不能让它无法完成评论.