您好,我正在尝试从文本文件中删除除货币值以外的所有内容,例如:
$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
对于每行,尝试将除$
([^$]*
)以外的任何符号集和数字集,,
和.
符号后面的$
替换为最后一部分+n
EW行。如果未执行替换(行中没有上述图案),则传递到1
点,否则打印从开始到第一个n
行符号(即所需的集合)的一部分。下一个操作D
从开始到第一个n
ew 行符号(如果行中存在)从行的一部分,然后从头开始操作。因此,如果模式为空(删除了整行),脚本将转到下一行,否则继续使用当前行的剩余部分进行操作。
或更简单(可能是)
sed -n '/$[0-9,.]+/{
s/[^$]*($[0-9,.]{1,})[^$]*/1x0a/g
s/n$//
p
}' myfile.txt >> output.txt
-n
禁止自动打印图案空间(打印仅由p
rint 指示的线条)/$[0-9,.]+/ {
下一个命令仅适用于由一组数字、,
和符号后面的.
组成的行$
s/[^$]*($[0-9,.]{1,})[^$]*/
上述集合与任何符号($
除外)之前和之后
,将1x0a/
成立集+n
ew线- 每次出现的
g
s
上述操作可能会导致出现空行,因此s/n$//
已将其删除。