我有一个包含100行数据的文件,格式如下:
Smith, John@email.com, 271Ave
Doe, James@email.com, 270Ave
.
.
等等
我想将所有内容更改为以下格式:
{"name": "Smith", "email": "John@email.com", "Address:" "271Ave"}
请建议如何在vim中实现这一目标。
答案 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
替换为您的文件名。