Как преобразовать длинный список строк в массив через запятую в редакторе vi? - PullRequest
0 голосов
/ 30 ноября 2018

Скажем, у меня есть список из 300 слов:

foo
bar
..
..
zzz

Я хочу

  1. Добавить кавычки вокруг них как -> foo становится "foo"
  2. Создание списка через запятую.

EG: ["foo", "bar", .., "zzz"]

в редакторе vi.Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Предположим, что каждая строка файла содержит ровно одно слово.

Тогда последовательность команд vi, подобных этой, выполнит задачу:

:%s/.*/"&"/
^G1G300J:s/" "/","/g
I[^[A]^[
  • %s/.*/"&"/ делаетпоиск и замена в каждой строке, заключая в кавычки (введите RETURN для выполнения)
  • ^G - это CTRL-G - примечание о количестве строк (предположим, что оно показывает 300)
  • 1G перемещается на первую строку
  • 300J объединяет следующие 300 строк вместе с пробелами
  • :s/" "/","/g заменяет пробел между словами в кавычках (введите RETURN для выполнения)
  • I[ добавляет скобку к началу строки.^[ - ESC для завершения ввода
  • A] добавляет скобку в конец строки.^[ - это ESC, чтобы завершить ввод
  • Готово!

В качестве альтернативы я начал совсем как jq.Выполнение этой конкретной задачи из командной строки оболочки становится простым:

jq <wordlist -Rc '[inputs]'

или вызывается изнутри vi, работая непосредственно с редактируемым списком слов:

1G!Gjq -Rc '[inputs]'
0 голосов
/ 01 декабря 2018

Вот реализация bash ... Я думаю, что может быть способ запустить скрипты в vi, но я не знаю, почему кто-то это сделал.

#/bin/bash
inputFile=path/to/your/file.txt

str=

while IFS='' read -r line || [[ -n "$line" ]]; do   
   str=$str\"$line\",; 
done < $inputFile.txt

echo [ ${str%?} ] > result.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...