【问题标题】:How to remove all spaces between double quotes within a block of text using linux command such as awk, sed如何使用 linux 命令(如 awk、sed)删除文本块中双引号之间的所有空格
【发布时间】:2018-02-08 09:56:42
【问题描述】:

如下面的示例文本行所示,这一行中只有一对引号,我想删除引号内的所有空格,空格数是未知的并且是有限的。我尝试删除空格,但最终只删除了第一个空格或连续数量的空格,需要有关如何删除引号内单词之间的所有空格的帮助。

示例字符串:

000000 100614 0000000... "All spaces to be removed" A path/segment1/segment2

输出:

000000 100614 0000000... "Allspacestoberemoved" A path/segment1/segment2

【问题讨论】:

  • 不使用gsub的for循环可以做到吗,单独sed命令能解决吗?
  • 在您发布该评论之前,我已经使用 gsub() 发布了一个没有 for 循环的答案。请确保在您的问题中说明了您的所有要求,而不是在其下方的 cmets 中分发零碎。

标签: linux shell awk sed replace


【解决方案1】:
$ awk 'BEGIN{FS=OFS="\""} {gsub(/[[:space:]]/,"",$2)} 1' file
000000 100614 0000000... "Allspacestoberemoved" A path/segment1/segment2

【讨论】:

    【解决方案2】:
    $ cat file 
    000000 100614 0000000... "All spaces to be removed" A path/segment1/seg
    
    $ awk '!(NR%2){gsub(FS,"")}1' RS=\" ORS=\" file
    000000 100614 0000000... "Allspacestoberemoved" A path/segment1/seg
    
    $ awk  'BEGIN{FS=OFS="\""}{for(i=2;i<NF;i+=2)gsub(/ /,"",$i)}1' file
    000000 100614 0000000... "Allspacestoberemoved" A path/segment1/seg
    
    $ sed -e :a -e 's/^\(\([^"]*"[^"]*"[^"]*\)*[^"]*"[^"]*\) /\1/;ta' file
    000000 100614 0000000... "Allspacestoberemoved" A path/segment1/seg
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-22
      • 2021-07-03
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      相关资源
      最近更新 更多