拆分可变长度的引用字符串

时间:2013-12-03 12:52:06

标签: unix awk gawk

我有一个可变长度的字符串,如下所示:

-DFOO -DBAR="1 2 3" -DTEST="\"asdf asdf\""

我想分成几行,使用空格作为分隔符(除非它们出现在引号中)。

该示例的预期结果是:

-DFOO
-DBAR="1 2 3"
-DTEST="\"asdf asdf\""

如何使用“普通”unix工具执行此操作。我尝试使用AWK,但没有任何运气,大多数使用AWK解决此问题的参考都有固定数量的参数。

1 个答案:

答案 0 :(得分:2)

你想要"normal" unix tool.

<强> AWK

awk -F' -' -v OFS='\n-' '$1=$1'

测试

kent$  echo '-DFOO -DBAR="1 2 3" -DTEST="\"asdf asdf\""'|awk -F' -' -v OFS='\n-' '$1=$1'
-DFOO
-DBAR="1 2 3"
-DTEST="\"asdf asdf\""

<强> SED

kent$  sed 's/ -/\n-/g' <<< '-DFOO -DBAR="1 2 3" -DTEST="\"asdf asdf\""'                 
-DFOO                                                                   
-DBAR="1 2 3"
-DTEST="\"asdf asdf\""

grep

kent$  echo '-DFOO -DBAR="1 2 3" -DTEST="\"asdf asdf\""'|grep -oP -e'-[^-]*' 
-DFOO 
-DBAR="1 2 3" 
-DTEST="\"asdf asdf\""