管道命令,修改stdin写入stdout

管道命令,修改stdin写入stdout
echo Hello World | nano - | less

我想在文本编辑器中修改 Hello -> Goodbye 。

它不一定要与 Nano 一起使用。我被 Nano 读取标准输入困住了,但要求我写入一个文件(写入 - 创建一个名为 - 的文件)

答案1

更多实用程序package 有一个很棒的命令可以执行此操作,称为vipe.从手册页:

SYNOPSIS
       command1 | vipe | command2

DESCRIPTION
       vipe allows you to run your editor in the middle of a unix pipeline and
       edit the data that is being piped between programs. Your editor will have
       the full data being piped from command1 loaded into it, and when you close
       it, that data will be piped into command2.

默认情况下,这将使用该editor命令,该命令通常只是默认命令行编辑器的符号链接。您可以通过更改链接(update-alternatives在基于 Debian 的系统上使用)或使用EDITOR环境变量来更改此设置。例如,你可以这样做:

echo Hello World | EDITOR=nano vipe | less

否则,如果特定的文本编辑器不支持此类事情,我认为您必须手动创建临时文件,将文件写入其中,运行编辑器,将文件输入到管道的其余部分,然后删除临时文件。该vipe命令基本上处理了这一切。这很好,但默认情况下该命令很少可用。

答案2

如果您只想将“Hello”替换为“Goodbye”(或任何其他单词替换),您可以避免在编辑器中进行手动编辑,而使用自动搜索和替换工具。例如“sed”可以进行这样的替换:

echo Hello World | sed 's/Hello/Goodbye/' | less

检查“man sed”以获取更多详细信息。

答案3

文本编辑器 joe(又名乔自己的编辑)做你想做的事。

该命令echo "hello world" | joe - | less按预期运行,尽管由于某种原因需要引号。

某些命令(例如 gpg)会产生不进入管道的显示输出。这会破坏 joe 内部的初始显示,但是击中控制键+r-- 刷新 -- 将清理一切。

相关内容