Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 滑动车窗更换_Regex_Sed - Fatal编程技术网

Regex 滑动车窗更换

Regex 滑动车窗更换,regex,sed,Regex,Sed,我写了下面的sed来从csv中解压缩数字 sed -E 's|,"(-?[0-9]*.?[0-9]*)",|,\1,|g' 当我尝试下面的表达式时 echo '"a","1.2","1.77",'|sed -E 's|,"(-?[0-9]*.?[0-9]*)",|,\1,|g' 结果是, “a”、1.2、“1.77” 尽管在替换第一列和最后一列中的数字时,这个特定的正则表达式存在问题。这里我真正关心的是,是否有办法使sed以滑动窗口方式工作?在GNUsed中,您可以使用 sed -E '

我写了下面的
sed
来从csv中解压缩数字

sed  -E 's|,"(-?[0-9]*.?[0-9]*)",|,\1,|g'
当我尝试下面的表达式时

echo '"a","1.2","1.77",'|sed  -E 's|,"(-?[0-9]*.?[0-9]*)",|,\1,|g'
结果是,

“a”、1.2、“1.77”


尽管在替换第一列和最后一列中的数字时,这个特定的正则表达式存在问题。这里我真正关心的是,是否有办法使sed以滑动窗口方式工作?

在GNU
sed
中,您可以使用

sed -E ':a; s/(,|^)"(-?[0-9]*\.?[0-9]+)"(,|$)/\1\2\3/g; ta' <<< '"a","1.2","1.77",'
# => "a",1.2,1.77,

详细信息

  • :a
    -设置
    a
    标签
  • s/(,|^)(?[0-9]*\.?[0-9]+)(,|$)/\1\2\3/g
    -查找所有匹配的
    (,|^)“(?[0-9]*\.?[0-9]+)(,|$)
    模式
    • (,|^)
      -第1组:逗号或字符串开头
    • -双引号
    • (?[0-9]*\.?[0-9]+)
      -第2组:可选的
      -
      ,0+位和可选的十进制分隔符,1+位
    • -双引号
    • (,|$)
      -第3组:逗号或字符串结尾
      并替换为组1、组2和组3的值
  • ta
    -成功替换后跳到
    a
    标签位置

请注意,模式中的文字点应该转义,否则,它将匹配任何字符。

出于某种原因,它在我的macOS终端中不起作用。你试过哪个贝壳?我用zsh和bash都试过。@kannaramamoorthy最初的演示是在GNU
sed
中进行的。在FreeBSD
sed
中,尝试
sed-E-E:a'-E's/(,| ^)(?[0-9]*?[0-9]+)“(,|$)/\1\2\3/g'-E'ta',因为双引号字符串中的双引号字符串需要被
\
引用,也许
sed-E's/([0-9.+]+)“/\1/g”文件就足够了?
sed -E -e ':a' -e 's/(,|^)"(-?[0-9]*\.?[0-9]+)"(,|$)/\1\2\3/g' -e 'ta'