簡體   English   中英

使用sed在Linux中編輯文本文件

[英]Editing a text file in linux using 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。 使用讀取命令從鍵盤讀取Depositval,並使用grep從文本文件中找到余額。

供以后參考,如果有人需要做類似的事情,我發現我第一次嘗試使用sed是這樣的

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

也可以使用,只需更改“

使用文本文件而不是數據庫效率極低,因為必須為每個事務重寫整個文件。 但是,這是解決方案的開始。

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

GNU Awk可以選擇就地重寫輸入文件,因此您不必手動將新文件移回舊文件。

這是一個測試案例。 $(( ... ))算術運算特定於bash

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM