使用 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
替换为您的文件名。
我有一个包含 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
替换为您的文件名。