Linux cat 命令输出,其中包含要使用 vim 读取的新行
Linux cat command output with new lines to be read using vim
我正在尝试打开文件 a.lst
:
中列出的所有文件
symptom1.log
symptom2.log
symptom3.log
symptom4.log
但尝试以下命令:
cat a.lst | tr "\n" " " | vim -
只打开标准输入输出
symptom1.log symptom2.log symptom3.log symptom4.log
在 vim 中没有打开 symptom1.log, symptom2.log, symptom3.log & symptom4.log
。
如何使用vim打开a.lst中列出的所有文件?
您可以使用 xargs 来排列 vi 的参数:
vim $(cat 1.t | xargs)
或
cat a.lst | xargs vim
如果您希望它们在拆分视图中打开,请使用 -o(水平)或 -O(垂直):
cat a.lst | xargs vim -o
cat a.lst | xargs vim -O
while read f ; do cat $f ; done < a.lst | vim -
我喜欢 Qiau 的 xargs 选项的变体:
xargs vim < a.lst
这是有效的,因为输入重定向应用于 xargs
命令而不是 vim
。
如果你的shell是bash,另一个选项是:
vim $(<a.lst)
这是有效的,因为在 $(...)
中,没有命令的输入重定向只是打印输入的结果,因此将文件扩展为文件列表以供 vim 打开。
更新:
您在评论中提到您正在使用 csh
作为您的 shell。所以您的另一个选择可能是:
vim `cat a.lst`
这在 POSIX shell 中也应该有效,但我应该指出反引号在其他一些 shell 中被弃用(特别是 bash)支持 $(...)
替代方案。
请注意,重定向可能发生在命令行的多个位置。这也适用于 csh 和 bash:
< a.lst xargs vim
vim 可能会抱怨它的输入不是来自终端,但它似乎对我有用。
我正在尝试打开文件 a.lst
:
symptom1.log
symptom2.log
symptom3.log
symptom4.log
但尝试以下命令:
cat a.lst | tr "\n" " " | vim -
只打开标准输入输出
symptom1.log symptom2.log symptom3.log symptom4.log
在 vim 中没有打开 symptom1.log, symptom2.log, symptom3.log & symptom4.log
。
如何使用vim打开a.lst中列出的所有文件?
您可以使用 xargs 来排列 vi 的参数:
vim $(cat 1.t | xargs)
或
cat a.lst | xargs vim
如果您希望它们在拆分视图中打开,请使用 -o(水平)或 -O(垂直):
cat a.lst | xargs vim -o
cat a.lst | xargs vim -O
while read f ; do cat $f ; done < a.lst | vim -
我喜欢 Qiau 的 xargs 选项的变体:
xargs vim < a.lst
这是有效的,因为输入重定向应用于 xargs
命令而不是 vim
。
如果你的shell是bash,另一个选项是:
vim $(<a.lst)
这是有效的,因为在 $(...)
中,没有命令的输入重定向只是打印输入的结果,因此将文件扩展为文件列表以供 vim 打开。
更新:
您在评论中提到您正在使用 csh
作为您的 shell。所以您的另一个选择可能是:
vim `cat a.lst`
这在 POSIX shell 中也应该有效,但我应该指出反引号在其他一些 shell 中被弃用(特别是 bash)支持 $(...)
替代方案。
请注意,重定向可能发生在命令行的多个位置。这也适用于 csh 和 bash:
< a.lst xargs vim
vim 可能会抱怨它的输入不是来自终端,但它似乎对我有用。