Linux sed regex for currency



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

$200,013,033.43
$2,000.32
$3000 

目前我一直在使用此命令,但只删除所有不是数字的内容,因此忽略"$,."等字符

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

输出符号后面的一组数字、,.$

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

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

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

或更简单(可能是)

sed -n '/$[0-9,.]+/{
s/[^$]*($[0-9,.]{1,})[^$]*/1x0a/g
s/n$//
p
}' myfile.txt >> output.txt
  • -n禁止自动打印图案空间(打印仅由print 指示的线条)
  • /$[0-9,.]+/ {下一个命令仅适用于由一组数字、,和符号后面的.组成的行$
  • s/[^$]*($[0-9,.]{1,})[^$]*/上述集合与任何符号($除外)之前和之后
  • ,将s
  • 1x0a/成立集+new线
  • 每次出现的g

上述操作可能会导致出现空行,因此s/n$//已将其删除。

最新更新