微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我怎样才能提供标准input,这需要一个文件名?

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

对于我看不到“ – ”目标的命令,ed说:

print '%-2pnq' | ed -s FILE

我可以提供从某些cmd的标准输出stream,而不是作为要处理的数据的文件名:

SomeCMD | ed -s SOMETHING_MAGICAL <<< 'print '%-2pnq'

有可能吗?

希望sed对ed的方便的j命令有相当的效果

ed从标准输入读取它的命令,所以如果你的文件也在标准输入,你是如何工作的?

实际上,如果您将输出连接到一行,则可以通过stdin提供文件输入

i

在开始的时候,开始写数据,然后追加一个。 结束输入,然后是任何命令。 你甚至可以把结果输出到标准输出。 请记住,如果文件中有一行只有一行,就会中断。 在里面。

所以如果一个文件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这个,但我不能让它做不了评论

您使用r来读取到文本缓冲区中的命令输出。 所以,便携式:

printf '%sn' 'r !df -h' g/tmpfs/d,pq | ed -s

要么

ed -s << IN r !df -h g/tmpfs/d,p q IN

上面读取df -h的输出删除与tmpfs匹配的行并打印结果。

如果你的shell支持进程替换:

printf '%sn' g/tmpfs/d,pq | ed -s <(df -h)

用gnu ed SOMETHING_MAGICAL被称为! 。

根据man页:

如果给出的话,通过阅读'文件'开始编辑。 如果'文件'以'!'开始,读取shell命令的输出

printf '%sn' g/tmpfs/d,pq | ed -s '!df -h'

或者, herestring :

ed -s '!df -h' <<< $'g/tmpfs/dn,pnqn'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐