首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用vim格式化

使用vim格式化
EN

Stack Overflow用户
提问于 2017-04-17 11:23:33
回答 2查看 63关注 0票数 1

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

代码语言:javascript
复制
    Smith, John@email.com, 271Ave 
    Doe, James@email.com, 270Ave  
    .
    .

诸若此类

我想将所有项目改为以下格式:

代码语言:javascript
复制
     {"name": "Smith", "email": "John@email.com", "Address:" "271Ave"}

请就如何在vim中实现这一点提出建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-17 11:50:13

如果每一行都有相同的文本格式,那么使用vim就很容易了。在vim中打开文件,假设光标位于line1,然后在寄存器q中记录宏

代码语言:javascript
复制
qqI{"name": "<esc>f,i"<esc>wi"email": "<esc>;i"<esc>wi"Address:" "<esc>A"}<esc>+q

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

代码语言:javascript
复制
200@q

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

票数 4
EN

Stack Overflow用户

发布于 2017-04-18 05:05:36

@肯特已经回答了这个问题。

如果有人喜欢使用awk,下面是如何使用awk来完成的:

代码语言:javascript
复制
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

易读的:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43450487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档