1

我需要做的是解析以下形式的字符串

-option optionArgument, --alternativeNotation 一些文本,没有什么感兴趣的...

我将FS设置为

BEGIN {
    FS = ",?\ +" 
}

但它没有用......它应该在每个随机数量的空白(至少一个)上中断,前面有一个逗号(可选)。有任何想法吗?

提前谢谢,

奥利弗

4

3 回答 3

1

FS = "[,]*[ ]+"

这使得逗号是可选的,而不是空格。这会从每个 -option 和 optionArg 中创建一个单独的字段,这就是我相信您想要的。

awk 'BEGIN {FS = "[,]*[ ]+";} { print $1; print $2; print $3; print $4; print $5;}' << EOF
> -option1 hello, --option2 world, -option3
> EOF
-option1
hello
--option2
world
-option3
于 2010-01-04T21:37:43.413 回答
1

FS做了您在问题中描述的内容,但是根据 shell 引用,空格前的反斜杠可能是多余的:

$ echo '-option optionArgument, --alternativeNotation Some text, nothing of interest...' |  \
  nawk 'BEGIN {
          FS=",? +";
          OFS="][";
        }
        {
          print "["$1,$2,$3,$4"]";
          print "["$5,$6,$7,$8"]";
        }'
[-option][optionArgument][--alternativeNotation][Some]
[text][nothing][of][interest...]

您希望这些字段是什么?

于 2010-01-04T21:42:42.513 回答
0

@OP,下次尝试描述您的最终输出是什么。

echo "-option1 hello,          --option2 world, -option3" | awk 'BEGIN{FS=",[ ]+"}
{
    for(i=1;i<=NF;i++){
        print $i
    }
}
'

输出

$ ./shell.sh
-option1 hello
--option2 world
-option3

此外,实际上不需要检查多个空白。只需使用逗号作为分隔符,稍后修剪剩余的空格。

echo "-option1 hello,          --option2 world, -option3" | awk 'BEGIN{FS=","}
{
    for(i=1;i<=NF;i++){
        gsub(/^ +| +$/,"",$i)
        print $i
    }
}
'

输出

$ ./shell.sh
-option1 hello
--option2 world
-option3
于 2010-01-04T23:49:31.857 回答