/ / Linux команда изход команда с нови линии, за да се чете с помощта на vim - linux, vim, котка, множество файлове

Linux команда изход команда с нови линии да се четат с помощта на vim - linux, vim, котка, множество файлове

Опитвам се да отворя всички файлове, изброени в файла a.lst:

symptom1.log
symptom2.log
symptom3.log
symptom4.log

Но опитайте следната команда:

cat a.lst | tr "n" " " | vim -

се отваря само изходът stdin

symptom1.log symptom2.log symptom3.log symptom4.log

Не се отваря symptom1.log, symptom2.log, symptom3.log & symptom4.log in vim.

Как да отворите всички файлове, изброени в a.lst използвайки vim?

Отговори:

6 за отговор № 1

Може да използвате xargs, за да подредите аргументите в vi:

vim $(cat 1.t | xargs)

или

cat a.lst | xargs vim

Ако искате да се отворят в разделен изглед, използвайте -о (хоризонтално) или -O (вертикално):

cat a.lst | xargs vim -o
cat a.lst | xargs vim -O

2 за отговор № 2

while read f ; do cat $f ; done < a.lst | vim -


2 за отговор № 3

Харесва ми вариация на опцията на Qiau xargs:

xargs vim < a.lst

Това работи, защото пренасочването на вход се прилага към xargs команда, а не vim.

Ако вашата черупка е bash, друга опция е следната:

vim $(<a.lst)

Това работи, защото в рамките на $(...), пренасочването на вход без команда просто отпечатва резултатите от входа, оттам разширявайки файла в списък с файлове, за да се отвори vim.

UPDATE:

Споменахте в коментарите, които използвате csh като вашата черупка. Така че може да бъде и друг вариант:

vim `cat a.lst`

Това трябва да работи и в POSIX черупки, но трябва да отбележа, че backquotes са отхвърлени в някои други черупки (особено bash) в полза на $(...) алтернатива.

Обърнете внимание, че пренасочването може да се случи на няколко места в командния ред. Това също трябва да работи както в csh, така и в bash:

< a.lst xargs vim

vim може да се оплаче, че неговият вход не идва от терминал, но така или иначе изглежда работи за мен.