我有一个包含100行数据的文件,格式如下:
Smith, John@email.com, 271Ave
Doe, James@email.com, 270Ave
.
.诸若此类
我想将所有项目改为以下格式:
{"name": "Smith", "email": "John@email.com", "Address:" "271Ave"}请就如何在vim中实现这一点提出建议。
发布于 2017-04-17 11:50:13
如果每一行都有相同的文本格式,那么使用vim就很容易了。在vim中打开文件,假设光标位于line1,然后在寄存器q中记录宏
qqI{"name": "<esc>f,i"<esc>wi"email": "<esc>;i"<esc>wi"Address:" "<esc>A"}<esc>+q然后重放宏200次(如果你有超过200行,你可以给999 )
200@q您将得到所需的输出。还可以使用嵌套宏,这样就不必键入200。
发布于 2017-04-18 05:05:36
@肯特已经回答了这个问题。
如果有人喜欢使用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。
https://stackoverflow.com/questions/43450487
复制相似问题