需要使用正则表达式从文件中删除空格

Need to remove whitespace from file using regular expression

我有一个大约半个演出的巨大文件,该文件包含如下所示的记录:

44     ,1577,23GRE                       ,GREASE THE ENGINE
44     ,1577,23GRE                       ,GREASE THE ENGINE
44     ,1577,24GRE                       ,GREASE THE WHEELS

我想删除内容 "GREASE THE ENGINE" 之后逗号和空格之间的空格,并使用 vi 如下所示转换文件:

"44","1577","23GRE","GREASE THE ENGINE"
"44","1577","23GRE","GREASE THE ENGINE"
"44","1577","24GRE","GREASE THE WHEELS"

我尝试通过命令删除空格 :1,$s/ //g 这会删除所有空格并呈现如下所示的文件,这违背了目的。我想要带空格的 GREASE THE ENGINE。

44,1577,23GRE,GREASETHEENGINE
44,1577,23GRE,GREASETHEENGINE
44,1577,24GRE,GREASETHEWHEELS

感谢任何或所有帮助。

谢谢

您可以在 vi 中使用此替代命令:

:1,$s/ *,/,/g
:1,$s/ *$//
:1,$s/,/","/g

首先我们替换尾随 space,然后将所有 space 后跟 , 替换为单个 ,。最后我们匹配每个不是逗号的字段并用引号引起来。

[[:blank:]] 将匹配 space 或制表符。

对于您的输入,它给出:

"44","1577","23GRE","GREASE THE ENGINE"
"44","1577","23GRE","GREASE THE ENGINE"
"44","1577","24GRE","GREASE THE WHEELS"

另一种可能性:

%s/\s\+\([,$]\)/""/g
%s/^/"/g
%s/$/"/g
  • 删除逗号或行尾前的任何白色 space 字符序列(白色 space、制表符等);
  • 在每行的开头添加"
  • 在每行末尾添加"

如果您在文件末尾有一个空行,您将以 "" 行结尾,这很容易删除。