我有一个名为BookDB.txt的txt文件,它具有以下数据。
little Prince:The Prince:15.00:188:9 Lord of The Ring:Johnny Dept:56.80:100:38 Catch Me If You Can:Mary Ann:23.60:6:2 Happy Day:Mary Ann:12.99:197:101
它由一个分隔符分隔,使得它的组由Title,Author,Price,Qtyleft和QtySold分隔。
这是我的问题,我需要提示input标题和作者,然后通过BookDB.txt检查find该书的行,并编辑它的价格。 我怎么去做呢? 这是我迄今为止所做的
read -p $'Title: ' updateTitle read -p $'Author: ' updateauthor #check if book exist in BookDB.txt if grep -Fq "${updateTitle}:${updateauthor}" BookDB.txt then read -p $'NewPrice: ' newPrice #This is the part i'm stuck else echo "Book does not exist" fi
权限被拒绝(publickey) – windows上的Git Bash
stty:标准input:不适用于设备的ioctl
如何在Bash循环中增加一个date
不能创build/ dev / stdout:没有这样的设备或地址
猫通过subprocess.Popen()调用时阻塞
backspace不会在bash中删除tput命令的下划线
什么是猫,在这里做什么?
Bash,指的是按值排列?
从pipe道中读取数据,并在两者之间延迟写入标准。 也必须处理二进制文件
linux bash脚本,添加数字的recursion
单程:
if grep -Fq "${updateTitle}:${updateauthor}" BookDB.txt then read -p $'NewPrice: ' newPrice awk -F: -v title="$updateTitle" -v auth="$updateauthor" -v price=$newPrice '$1==Title && $2==auth{$3=price;}1' OFS=":" BookDB.txt >> BookDB.txt_tmp mv BookDB.txt_tmp BookDB.txt else echo "Book does not exist" fi
使用awk ,第三个字段被更新,内容被复制到一个临时文件中,然后被重新命名为原始文件。
参数updateTitle,updateauthor和newPrice使用-v选项传递给awk 。 第一个( $1 )字段与updateTitle进行检查,第二个字段( $2 )与updateauthor进行检查,如果两者匹配,第三个字段用newPrice( $3=price )取代。 1最后是打印每一行。
使用sed(GNU) :(代替上面的awk和mv)
sed -i "s/(${updateTitle}:${updateauthor}:)([^:]*)(.*)/1${newPrice}3/" file
这是另一个解决方案:
if grep -Fq "${updateTitle}:${updateauthor}" BookDB.txt then read -p $'NewPrice: ' newPrice sed -i -e "s/${updateTitle}:${updateauthor}:[^:]+/${updateTitle}:${updateauthor}:${newPrice}/g" BookDB.txt else echo "Book does not exist" fi
总结以上是内存溢出为你收集整理的在其他字段中编辑txt文件中的特定字段数据全部内容,希望文章能够帮你解决在其他字段中编辑txt文件中的特定字段数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)