我有一个大文件,里面有如下几行
2 没有到达指定传输网络的路由
3 没有到达目的地的路线
我想将其转换为编程语言
{2,"没有到达指定交通网络的路线"},
{3,"没有到达目的地的路线"},
我该如何做呢?
答案1
基本转换是,
sed 's|^\([0-9]\)\(.*\)|{\1,"\2"}|g' file.txt > file2.txt
在vim
,
:%s/\([0-9] \(.*\)/{\1,"\2"}/g
这将涵盖以以下格式开头的行,
行上有 N 个文本...
其中N
是一位数。
可以进一步扩展为其他形式。
答案2
在您的案例中,一个简单的正则表达式就足够了(也是最好的解决方案)。但是,在其他一些情况下,记录宏可能会更好。
有一个简单的宏示例vim 文档,第 12.1 节,以及进一步的说明:help q
简而言之:
- 键入
q
后跟一个字母(该字母是register
录制宏的位置)。 - 执行一些命令,根据需要修改文本,使用 Vim 的所有功能。
- 将光标移至下一行。
- 按下
q
停止录音。
要播放宏,请按@
,然后按录制宏的位置的字母。要重新播放最后一个宏,请按@@
。在播放宏之前输入一个数字,即可根据需要重复播放该宏。
因此,对于您来说,可以将这些行转换为如下形式:
2 No route to specified transit network
{2, "No route to specified transit network"},
- 将光标置于其中一行上。
- 按下
qa
(寄存器的选择a
是任意的)。 - 准确按下此键(包括引号和空格)
I{<esc>f cl, "<esc>A"},<esc>j
- 按下
q
停止录音。 - 按下
100@a
并高兴地观看宏的播放。:-)
我将从步骤 3 开始将每个命令的解释留给读者。;-)
当然,这不是唯一的解决方案。你可以用很多不同的方法完成第 3 步。
答案3
这个 vim 命令能实现你想要的功能吗?
%s/^\(.\)\ \(.*\)$/{\1,\ "\2"},/g
答案4
:%s/^\s*\(\d\+\)\s\+\(\S.\{-}\)\s*$/{\1, "\2"}/