在大行文件的每一行中搜索并替换第一个分隔符?

时间:2014-02-22 02:26:13

标签: regex windows text

我有一些大文件(大于2GB),文件中的文字格式如下:

2013/4/18;22:5:42.668;13266;10;13279;10
2013/4/18;22:10:48.820;13271;10;13279;10
2013/4/18;22:12:0.956;13266;10;13279;10
2013/4/18;22:12:44.826;13266;10;13284;10
...

我想完成以下任务

- replace the 1st semi-colon ";" in each line to space character " "
- replace the rest semi-colon ";" in each line to comma character ","

输出应如下所示

2013/4/18 22:5:42.668,13266,10,13279,10
2013/4/18 22:10:48.820,13271,10,13279,10
2013/4/18 22:12:0.956,13266,10,13279,10
2013/4/18 22:12:44.826,13266,10,13284,10
...

任何人都可以告诉我怎么做?

3 个答案:

答案 0 :(得分:0)

虽然这不是一个正则表达式,但这将是你的工作! 这叫做emacs keyborad macro!

这些是您在emacs中打开此文件后需要按下的键。

为什么我要求你定义宏是因为一旦定义了你只需按一个或两个键就可以随时使用它。

在emacs中打开您的文件,然后开始按这些键:

alt-shift-, //go to the start of the file
ctrl-x-(    //start defining keyboard macro
ctrl-s      //search for some thing
;           //that something is your ;
ctrl-b      //move one step back
ctrl-d      //delete the ;
[space-bar] //add space
ctrl-[space-bar] //start selecting region
ctrl-e      //select region till the end of line
alt-shift-5 //replace all from region
;           //replace ; 
,           //with ,
shift-1     //do this for all ; in region
ctrl-e      //move to end of line
ctrl-f      //go to start of next line
ctrl-x-)    //end macro
//now-your-macro-is-defined
ctrl-[space-bar] //again define the region
alt-shift-.     //select all file (except first line)
M-x-apply-macro-to-region //apply perviously defined macro to complete file!

希望这有帮助!

答案 1 :(得分:0)

可以在gVim for Windows中轻松完成。首先,我们用一个简单的macro用空格替换每一行中的第一个分号。要输入宏,请键入:

ggq1(or any letter)^f;r jq 

解释:

  • gg:转到文件的开头
  • q1:开始录制到注册1或任何地方
  • ^:转到行首
  • f;:转到右侧;的出现
  • r:用空格
  • 替换光标下的字符
  • j:转到下一行
  • q:停止录制

然后在命令模式下按类型:2,$:normal @1从第二行执行宏,现在所有行的第一个分号都被空格替换。之后,使用:%s/;/,/g替换其余的分号。

答案 2 :(得分:0)

这是一个执行工作的perl one liner:

perl -api.back -e 's/;/ /; s/;/,/g;' in.txt

原始文件保存在in.txt.back下,替换就地完成。