Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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
Regex awk中的多场分离器_Regex_String_Awk - Fatal编程技术网

Regex awk中的多场分离器

Regex awk中的多场分离器,regex,string,awk,Regex,String,Awk,我有这根绳子 -foo {{0.000 0.000} {648.0 0.000} {648.0 1980.0} {0.000 1980.0} {0.000 0.000}} 我想把它分成几个数字,然后迭代,谢谢 尝试使用字段分隔符但未成功如何使用awk?尝试执行以下操作: awk -F'}+|{+| ' '{for (i=1; i<=NF; i++) if ($i ~ "[0-9]") print $i}' file.txt 解释 foo | bar | base是一个正则表达式,它可

我有这根绳子

-foo {{0.000 0.000} {648.0 0.000} {648.0 1980.0} {0.000 1980.0} {0.000 0.000}}
我想把它分成几个数字,然后迭代,谢谢 尝试使用字段分隔符但未成功如何使用awk?

尝试执行以下操作:

awk -F'}+|{+| ' '{for (i=1; i<=NF; i++) if ($i ~ "[0-9]") print $i}' file.txt
解释
  • foo | bar | base
    是一个正则表达式,它可以匹配由
    |
    分隔的任何字符串
  • }+{+}
    中,我们可以选择匹配文字
    }
    至少一个:
    +
    ,或文字
    {
    至少一个:
    +
    或空格
  • 您也可以使用一类字符来执行相同的操作:
    [{}]
    ,两者都可以
    • 带awk的单向:

      awk -F'[{} ]' '{ for( i=1; i<=NF; i++ ) if( $i ~ /[0-9.]+/ ) print $i }' file
      

      如果只想在新行上显示每个数字,只需使用
      grep

      $ egrep -o '[0-9]+\.[0-9]+' file
      0.000
      0.000
      648.0
      0.000
      648.0
      1980.0
      0.000
      1980.0
      0.000
      0.000
      

      诚然,我的产品非常简单。根据我的经验,字段分隔符的正则表达式示例是最值得学习的,特别是当您必须处理XML等问题时。但在这种情况下,我们必须记住,当遇到不相关的字符时,UNIX为您提供了许多选择。一个简单的解决方法是删除不需要的字符。有多种方法,但我会像这样使用
      tr-d'{}'

      tr -d '{}' file.txt | awk '{ for( i=2; i<=NF; i++ ) print $i }'
      

      tr-d'{}file.txt | awk'{for(i=2;i您正在寻找一个regexp?类似于
      \d+\。\d+
      ?是的,但我知道\d+不能与awkthanks sputnick一起工作。ypu能解释一下吗}+|{+| ' seperator@stArdustͲ我想用冒号或空格作为分隔符,但是,似乎awk-F':|'不起作用。我遗漏了什么吗?谢谢。我找到了答案:awk-F':[\t]*.[\t]+'。感谢此链接:
      $ egrep -o '[0-9]+\.[0-9]+' file
      0.000
      0.000
      648.0
      0.000
      648.0
      1980.0
      0.000
      1980.0
      0.000
      0.000
      
      tr -d '{}' file.txt | awk '{ for( i=2; i<=NF; i++ ) print $i }'