如何在vi编辑器中将一长串字符串转换为逗号分隔的数组?

时间:2018-11-30 19:47:33

标签: vi

说我有300个单词的列表:

foo
bar
..
..
zzz

我想

  1. 在其周围添加引号,例如-> foo变为“ foo”
  2. 生成逗号分隔列表。

E.G:[“ foo”,“ bar”,..,“ zzz”]

在vi编辑器中

。我该怎么做?

2 个答案:

答案 0 :(得分:0)

这是一个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

答案 1 :(得分:0)

我们假设文件的每一行都包含一个单词。

然后一系列的vi命令将完成任务:

:%s/.*/"&"/
^G1G300J:s/" "/","/g
I[^[A]^[
  • %s/.*/"&"/在每一行中进行搜索和替换,并用引号引起来(键入RETURN以执行)
  • ^G是CTRL-G-注意行数(我们假设它显示300)
  • 1G移至第一行
  • 300J将后面的300行和空格连接在一起
  • :s/" "/","/g用逗号替换引号之间的空格(键入RETURN以执行)
  • I[将方括号放在行首。 ^[是ESC以完成输入
  • A]将括号附加到行尾。 ^[是ESC以完成输入
  • 完成!

作为一种选择,我开始很喜欢jq。从shell命令行执行此特定任务变得很简单:

jq <wordlist -Rc '[inputs]'

或在vi中调用,直接对正在编辑的单词表进行操作:

1G!Gjq -Rc '[inputs]'