使用 vim 格式化

Formatting using vim

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

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

等等

我想把所有的全部改成下面的格式:

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

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

用 vim 做起来很容易,如果每一行都有相同的文本格式。打开vim中的文件,假设你的光标在第1行,然后在寄存器q:

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

然后把宏重放200次(超过200行可以给999)

200@q

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

@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\": \"""\", \"email\": \""ltrim()"\", \"Address\": \""rtrim(ltrim())"\"}"}' < 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\": \"""\", \"email\": \""ltrim()"\", \"Address\": \""rtrim(ltrim())"\"}"
}
' < tmp

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