使用sed在linux中编辑文本文件

时间:2018-01-24 14:25:11

标签: linux bash sed

我创建了一个“模拟”银行系统的脚本,允许用户根据需要检查余额并提取或存款。有关客户,其余额等的详细信息保存在名为data.txt的文本文件中。当客户提款或存款时,应相应调整文本文件。问题是,使用像这样的sed

sed -i 's/$balance/$($balance + $depositval)/' data.txt 

不起作用。我也尝试过grep,但也没有运气。是否有办法将客户的余额改为他们的余额产生的金额以及他们希望存入的金额(或者如果他们需要提取资金则减去)使用sed并将变量作为参数传递?

PS:以下是我的data.txt文件的内容:

12345 Nick Abrams A 25575
67890 George Michaels I 10000
14680 Jack Jordan A 2960
13670 Michael Patton I 5065

第一个字段是客户的卡号。 A和I表示客户的卡是处于活动状态还是非活动状态。第五场是平衡。顺便说一句,我正在使用bash shell。使用读取命令从键盘读取存款值,并使用grep。

从文本文件中找到余额

为了将来参考,如果有人需要做类似的事情我发现我第一次尝试使用这样的sed

sed -i 's/$balance/$($balance + $depositval)/' data.txt

也有效,只需要改变'with“

2 个答案:

答案 0 :(得分:4)

使用文本文件而不是数据库是非常低效的,因为必须为每个事务重写整个文件。但这是解决方案的开始。

awk -v deposit="123.45" -v account="14680" '$1 == account { $5 += deposit }' file >newfile &&
mv newfile file

GNU Awk可以选择就地重写输入文件,因此您不必手动将新文件移动到旧文件之上。

答案 1 :(得分:1)

这是一个测试用例。 $(( ... ))算术运算特定于bash

$ a=1
$ b=2
$ cat data.txt
name 1

$ sed "s/$a/$(( $a + $b ))/g" data.txt
name 3