【问题标题】:How to make a new line for every space, except one?如何为每个空间创建一个新行,除了一个?
【发布时间】:2017-06-26 20:42:26
【问题描述】:

我有一个这样的文本文件:

 www.twitter.com,sev-pool,tiger lion,
 www.google.com,"http google-pool,,
 www.facebook.com,pool,usa mexico canada,

在本例中,除了 "http google-pool 中的空格之外,我想让每个空格都成为一个新行,因为 " 在这一行中是不匹配的。

有没有一种方法可以在不使用行号的情况下做到这一点?也许是一个依赖于 "if 语句,或者任何其他方式?

我正在使用 tr 命令:tr " " "/n" 但我无法省略所需的行。

预期输出:

www.twitter.com,sev-pool,tiger
lion,
www.google.com,"http google-pool,,
www.facebook.com,pool,usa
mexico
canada,

【问题讨论】:

  • tr ' ' '\n' 反斜杠,单引号(或双反斜杠)

标签: shell unix if-statement sh tr


【解决方案1】:

awk 解决方案可满足您的更新要求(忽略具有不匹配 " 的行):

awk '/"[^"]*$/ { print; next } { gsub(" ", "\n"); print }' file

注意:

  • 假设包含不匹配的" 的行应从空格到换行符的转换中排除作为一个整体

这会产生:

www.twitter.com,sev-pool,tiger
lion,
www.google.com,"http google-pool,,
www.facebook.com,pool,usa
mexico
canada,

【讨论】:

    【解决方案2】:
    awk '!/google/{gsub(/ /,"\n")}1' file
    
    www.twitter.com,sev-pool,tiger
    lion,
    www.google.com,"http google-pool,,
    www.facebook.com,pool,usa
    mexico
    canada,
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多