【问题标题】:How to remove white spaces between word and spefic token?如何删除单词和特定标记之间的空格?
【发布时间】:2018-01-15 20:02:31
【问题描述】:

我想清理看起来像这样的代码。

for(i=0; i < max; i++){
    test = 5 + test                     ;
    if (test == 10)
         printf("HELLO WORLD\n")          ;
}

如何去掉“test”和“;”之间的空格不去格式化其他行?

编辑:我还想删除分号前的所有其他空格。

我试过这个:

sed 's/;.*$/;/p' $FILE

但它也会删除从行首到第一个单词的空格。

我更喜欢使用 awk 或 sed 之类的答案。 谢谢。

【问题讨论】:

  • 欢迎来到堆栈溢出,请向我们展示示例 Input_file 和 CODE TAGS 中的预期输出。

标签: awk sed


【解决方案1】:

这将删除行尾 ; 之前的所有空白字符(空格或制表符):

sed 's/[[:blank:]]*;$/;/' file.c

我假设您还希望删除 printf 行上分号前的空格。

【讨论】:

  • 完美!谢谢你的回复。
【解决方案2】:

删除“test”和“;”之间的空格无需使用 awk 对其他行进行格式化

$ awk '{sub(/test +;/,"test;")}1' file
for(i=0; i < max; i++){
    test = 5 + test;
    if (test == 10)
         printf("HELLO WORLD\n")          ;
}

如果test +; 出现在行尾以外的其他地方,您可以将其放入正则表达式中:/test +; *$/

编辑使用 awk 删除 ;s 之前(和之后)的所有空格:

$ awk '{sub(/ +; *$/,";")}1' file
for(i=0; i < max; i++){
    test = 5 + test;
    if (test == 10)
         printf("HELLO WORLD\n");
}

【讨论】:

  • 我觉得通常是sed 的工作:-)
  • @sjsam 所以我也想通了,但是在您发表评论后,我将 Tom 的速度和我的解决方案与一百万行 `test = 5 + test ;` 进行了比较。 awk 实时运行 1.614s 和 sed 5.066s。
  • 对不起。在我的初稿中,我没有指定我还想删除分号之前出现的所有其他空格。还是谢谢你的回复。/
猜你喜欢
  • 2014-07-30
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多