使用vim格式化

时间:2017-04-17 11:23:33

标签: vim vi

我有一个包含100行数据的文件,格式如下:

    Smith, John@email.com, 271Ave 
    Doe, James@email.com, 270Ave  
    .
    .

等等

我想将所有内容更改为以下格式:

     {"name": "Smith", "email": "John@email.com", "Address:" "271Ave"}

请建议如何在vim中实现这一目标。

2 个答案:

答案 0 :(得分:4)

如果每行都有相同的文本格式,那么使用vim很容易。在vim中打开文件,假设光标在第1行,然后在寄存器video url=file:///var/mobile/Media/DCIM/100APPLE/IMG_0165.MOV中记录宏:

q

然后重播宏200次(你可以给999,如果你有超过200行)

qqI{"name": "<esc>f,i"<esc>wi"email": "<esc>;i"<esc>wi"Address:" "<esc>A"}<esc>+q

您将获得所需的输出。您还可以使用嵌套宏,这样就不必键入200@q

答案 1 :(得分:1)

@Kent回答了这个问题。

如果有人喜欢使用awk,可以使用awk完成以下操作:

awk -F, 'function ltrim(s) { sub(/^[ \t\r\n]+/, "", s); return s } function rtrim(s) { sub(/[ \t\r\n]+$/, "", s); return s } {print "{\"name\": \""$1"\", \"email\": \""ltrim($2)"\", \"Address\": \""rtrim(ltrim($3))"\"}"}' < tmp

易于阅读:

awk -F, '
function ltrim(s) { sub(/^[ \t\r\n]+/, "", s); return s }
function rtrim(s) { sub(/[ \t\r\n]+$/, "", s); return s }
{
print "{\"name\": \""$1"\", \"email\": \""ltrim($2)"\", \"Address\": \""rtrim(ltrim($3))"\"}"
}
' < tmp

复制粘贴命令并将tmp替换为您的文件名。