/ / Linux výstup príkazu cat s novými riadkami, ktoré sa majú čítať pomocou vim - linux, vim, cat, viacnásobné súbory

Linux príkaz príkazu cat s novými čiarami, ktoré sa majú čítať pomocou súborov vim - linux, vim, cat, multiple - files

Snažím sa otvoriť všetky súbory uvedené v súbore a.lst:

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

Ale skúste nasledujúci príkaz:

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

otvára iba výstup stdin

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

Neotvára sa symptom1.log, symptom2.log, symptom3.log & symptom4.log in vim.

Ako otvoriť všetky súbory uvedené v a.lst pomocou vim?

odpovede:

6 pre odpoveď č. 1

Môžete použiť xargs na zarovnanie argumentov do vi:

vim $(cat 1.t | xargs)

alebo

cat a.lst | xargs vim

Ak ich chcete otvoriť v rozdelenom zobrazení, použite -o (horizontálne) alebo -O (vertikálne):

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

2 pre odpoveď č. 2

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


2 pre odpoveď č. 3

Páči sa mi variácia možnosti xargov Qiau:

xargs vim < a.lst

Funguje to preto, že presmerovanie vstupu sa použije na xargs príkaz skôr ako vim.

Ak je váš shell bash, ďalšou možnosťou je táto:

vim $(<a.lst)

Funguje to preto, že v rámci $(...), presmerovanie vstupu bez príkazu jednoducho vytlačí výsledky vstupu, čím sa súbor rozbalí do zoznamu súborov, aby sa vim mohol otvoriť.

UPDATE:

Spomenuli ste v komentároch, ktoré používate csh ako vaša škrupina. Ďalšou možnosťou pre vás teda môže byť:

vim `cat a.lst`

To by malo fungovať aj v škrupinách POSIX, ale chcel by som zdôrazniť, že backquoty sú zastarané v niektorých iných škrupinách (najmä bash) v prospech $(...) alternatíva.

Upozorňujeme, že presmerovanie sa môže uskutočniť na viacerých miestach príkazového riadku. To by malo fungovať aj v csh aj bash:

< a.lst xargs vim

vim sa môže sťažovať, že jeho vstup nepochádza z terminálu, ale zdá sa, že pre mňa napriek tomu funguje.