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组:逗号或字符串开头(,|^)
-双引号“
-第2组:可选的(?[0-9]*\.?[0-9]+)
,0+位和可选的十进制分隔符,1+位-
-双引号“
-第3组:逗号或字符串结尾(,|$)
并替换为组1、组2和组3的值
-成功替换后跳到ta
标签位置a
请注意,模式中的文字点应该转义,否则,它将匹配任何字符。出于某种原因,它在我的macOS终端中不起作用。你试过哪个贝壳?我用zsh和bash都试过。@kannaramamoorthy最初的演示是在GNU
sed
中进行的。在FreeBSDsed
中,尝试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'