我需要做的是解析以下形式的字符串
-option optionArgument, - alternativeNotation一些文字,没什么兴趣......
我将FS设置为
BEGIN {
FS = ",?\ +"
}
但它没有用......它应该在每个随机数量的空格(至少一个)上打破,前面有一个逗号(可选)。有什么想法吗?
提前,
奥利弗
答案 0 :(得分: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
答案 1 :(得分: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...]
你想要这些字段是什么?
答案 2 :(得分: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