我有一个文件,其中有100行数据,格式如下:
Smith, [email protected], 271Ave Doe, [email protected], 270Ave . .
字符串等我想把所有的条目都改成下面的格式:
{"name": "Smith", "email": "[email protected]", "Address:" "271Ave"}
型请建议如何在Vim中实现这一点。
68bkxrlz1#
如果每行都有相同的文本格式,用Vim来做很容易。在vim中打开文件,假设你的光标在第1行,然后在寄存器q中记录宏:
q
qqI{"name": "<esc>f,i"<esc>wi"email": "<esc>;i"<esc>wi"Address:" "<esc>A"}<esc>+q
字符串然后重放宏200次(如果超过200行,可以给给予999)
200@q
型你也可以使用嵌套宏,这样你就不必输入200。
200
lndjwyie2#
@肯特已经回答了问题。“下面是如何使用awk来完成它,如果有人喜欢使用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
型copy paste命令并将tmp替换为您的文件名。
tmp
zed5wv103#
就这么办:
:%s/\([^, ]\+\), \([^, ]\+\), \([^, ]\+\)/{"name": "\1", "email": "\2", "Address ": "\3"}
字符串\([^, ]\+\)将不包含,或空格``的任何字符分组。
\([^, ]\+\)
,
3条答案
按热度按时间68bkxrlz1#
如果每行都有相同的文本格式,用Vim来做很容易。在vim中打开文件,假设你的光标在第1行,然后在寄存器
q
中记录宏:字符串
然后重放宏200次(如果超过200行,可以给给予999)
型
你也可以使用嵌套宏,这样你就不必输入
200
。lndjwyie2#
@肯特已经回答了问题。“
下面是如何使用
awk
来完成它,如果有人喜欢使用awk:字符串
易于阅读:
型
copy paste命令并将
tmp
替换为您的文件名。zed5wv103#
就这么办:
字符串
\([^, ]\+\)
将不包含,
或空格``的任何字符分组。