如何为每个空间创建一个新行,除了一个?

时间:2017-06-26 20:42:27

标签: shell unix if-statement sh tr

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

 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,

2 个答案:

答案 0 :(得分:2)

符合您更新要求的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,

答案 1 :(得分:0)

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,