我有一个带有以下行的文本文件:
201174480 11-01-1911 J Student 25-07 11585 2 0 SPOED BEZORGEN 1ST 25,00
320819019 11-01-1911 T. Student 28-07 13561 1 15786986 DESLORATADINE TABL OMH 5MG 60ST 3,60
706059901 11-01-1911 ST Student-Student 30-06 14956 1 15356221 METOPROLOLSUCC RET T 100MG 180ST 12,90-
我想用SED将此行更改为:
201174480 11-01-1911 J Student 25-07 11585 2 0 SPOED BEZORGEN 1ST 25,00
320819019 11-01-1911 T. Student 28-07 13561 1 15786986 DESLORATADINE TABL OMH 5MG 60ST 3,60
706059901 11-01-1911 ST Student-Student 30-06 14956 1 15356221 METOPROLOLSUCC RET T 100MG 180ST -12,90
所以我想用SED交换减号,以便我得到12,90而不是12,90-。我试过了:
尝试1:
sed 's/\([0-9.]\+\)-/-\1/g' file.txt > file1.txt
尝试2:
sed 's/\([0-9].\+\)-$/-\1/g' file.txt > file1.txt
因此,REGEX肯定有问题,但我不太了解。请帮忙。
您可以使用
sed 's/\([0-9][0-9,.]\+\)-\($\|[^0-9]\)/-\1\2/g'
观看在线演示
关键是,在匹配数字和a -
(请参阅\([0-9][0-9,.]\+\)-
)之后,应该在字符串的末尾或非数字(\($\|[^0-9]\)
)的末尾。因此,我们现在有2个捕获组,这就是为什么我们需要替换模式(\2
)中的第二个反向引用。
我.
在括号表达式中添加了一个点,以防万一您使用混合数字格式,如果始终用逗号作为小数点分隔符,则可以将其删除。
图案细节:
\([0-9][0-9,.]\+\)
-组1捕获
[0-9]
-一个数字[0-9,.]\+
-一个或多个数字,逗号或点-
-文字连字符\($\|[^0-9]\)
-组2捕获字符串的末尾$
或非数字([^0-9]
)本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句