Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何在awk中使用多个字符作为单个分隔符?_Shell_Awk_Gawk - Fatal编程技术网

Shell 如何在awk中使用多个字符作为单个分隔符?

Shell 如何在awk中使用多个字符作为单个分隔符?,shell,awk,gawk,Shell,Awk,Gawk,我有一个目标文件,其分隔符为“|^/” 例如: 123|^/qwe|^/po9076|^/env12|^/opti|^/546454 现在需要得到每行中的字段数 我累了,像下面这样,但没有给出正确的结果 echo "123|^/qwe|^/po906|^/env12|^/opti|^/54644" | awk -F'|^/' '{print NF; exit}' 如何处理这个问题 注意:字段值中可以有|或^或/。因此,分隔符应该是| ^/的组合您应该使用大括号表达式(或字符类)作为字段分隔符

我有一个目标文件,其分隔符为
“|^/”

例如:

123|^/qwe|^/po9076|^/env12|^/opti|^/546454
现在需要得到每行中的字段数

我累了,像下面这样,但没有给出正确的结果

echo "123|^/qwe|^/po906|^/env12|^/opti|^/54644" | awk -F'|^/' '{print NF; exit}'
如何处理这个问题


注意:字段值中可以有
|
^
/
。因此,分隔符应该是
| ^/
的组合您应该使用大括号表达式(或字符类)作为字段分隔符:

echo "123|^/qwe|^/po906|^/env12|^/opti|^/54644" | awk -F '[|^/]+' '{print NF; exit}'

6
Regex
[| ^/]+
将在
[…]
中生成一个或多个给定字符作为输入字段分隔符

$ echo "123|^/qwe|^/po906|^/env12|^/opti|^/54644" | awk -F'\\|\\^/' '{print NF; exit}'
6

manawk
googleregular expressions

我对OP注释中的问题的理解是,分隔符实际上是三字符序列
^/
。“组合”一词的使用让人困惑,但OP似乎在说这些字符中的任何一个都可以在字段值中,因此这三个字符都需要作为分隔符。是的,想象一下如果其中一个值是
abc | def
。你的FS不算是两个字段吗?是的,这个正则表达式当然会把它当作两个字段感谢Anubhava的建议,Ed的解决方案对我有效。这个答案不起作用,因为你的误导性要求
字段值中可以有|或^或/。这句话的意思是,这些分隔符中的任何一个都会分割一个字段。另一方面,
“\\\\\\\\^/”
将使它成为一个3个字符长度的分隔符,并带有字符串
\\\^/
,这可能会更清楚,因为
awk-F“\\\\\\\\\\\\\\^/”…
:)我想你是在开玩笑:-)。