Linux 货币的 sed 正则表达式

Linux sed regex for currency

您好,我正在尝试从文本文件中删除除货币值以外的所有内容,例如:

0,013,033.43
,000.32
00 

目前我一直在使用这个命令,但只删除所有不是数字的东西,比如“$,.”之类的字符。被忽略

sed 's/[^0-9]*//g' myfile.txt >> output.txt
grep -o '$[0-9,.]\+' myfile.txt >> output.txt

输出$符号后的,.的每一次出现。

如果你坚持sed(主要是GNU sed版本):

sed 's/[^$]*\($[0-9,.]\+\)/\n/
     T1
     P
     :1
     D' myfile.txt >> output.txt

对于每一行,尝试替换除 $ ([^$]*) 之外的任何符号集和数字集,,. 之后 $ 符号由最后一部分 + n 新行。如果替换没有执行(行中没有上面的模式)传递到 1 点,否则打印从开始到第一个 \n 新行符号(即所需集)的部分行。下一个操作D删除从开始到第一个行的部分\n新行符号,如果该行或整行中存在并从头开始操作。因此,如果模式为空(整行已被删除)脚本转到下一行,否则继续使用当前行的剩余部分进行操作。

或更简单(可能)

sed -n '/$[0-9,.]\+/{
                     s/[^$]*\($[0-9,.]\{1,\}\)[^$]*/\x0a/g
                     s/\n$//
                     p
                     }' myfile.txt >> output.txt
  • -n 禁止自动打印模式 space(仅打印由 print 指示的行)
  • /$[0-9,.]\+/ { 下一个命令仅适用于包含数字集的行,,. 跟随 $ 符号
  • s/[^$]*\($[0-9,.]\{1,\}\)[^$]*/以上集合连同前后任何符号($除外)将被s代入
  • \x0a/创建集+\n新行
  • g 每次出现

以上操作可能会出现空行,所以s/\n$//已删除