我需要转换字符串" 1,234" =到=> 1234。 这个字符串只是更大一行的一部分。文件中有数千条这样的行。
我写了一个sed命令,它没有像我期望的那样工作。
echo \"1,234\" | sed 's/\("\)\([0-9]+\)\(,\)\([0-9]+\)\("\)/\2\4/g'
据我了解,在此代码中,
我希望这个命令输出1234,它应该是\ 2 \ 4。但它只会收益" 1,234"。所以我认为它没有被正确解析。一些帮助将不胜感激。
答案 0 :(得分:1)
我建议您使用POSIX Extended Regular Expressions(ERE),在这里您不必转义括号和重复运算符。要在sed
中启用ERE,您可以使用-E
开关(或GNU -r
中的sed
)。您的表达式将如下所示:
$ echo '"1,234"' | sed -E 's/"([0-9]+),([0-9]+)"/\1\2/g'
1234
为完整起见,如果您逃避+
:
echo \"1,234\" | sed 's/\("\)\([0-9]\+\)\(,\)\([0-9]\+\)\("\)/\2\4/g'
1234
答案 1 :(得分:0)
您的第二和第四组包含[0-9]+
,其匹配任何数字,后跟加号。
看起来你的意思是[0-9]\+
,以匹配一个或多个数字。
顺便说一句:没有必要对您不会使用的部分进行分组(\1
,\3
和\5
)。您可以简化为:
echo \"1,234\" | sed 's/"\([0-9]\+\),\([0-9]\+\)"/\1\2/g'
如果您发现所有\
难以处理,您可以使用Extendend正则表达式语法,-E
标记:
echo \"1,234\" | sed -E 's/"([0-9]+),([0-9]+)"/\1\2/g'