我需要做的是解析以下形式的字符串
-option optionArgument, --alternativeNotation 一些文本,没有什么感兴趣的...
我将FS设置为
BEGIN {
FS = ",?\ +"
}
但它没有用......它应该在每个随机数量的空白(至少一个)上中断,前面有一个逗号(可选)。有任何想法吗?
提前谢谢,
奥利弗
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
您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...]
您希望这些字段是什么?
@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