图书馆数据库

图书馆数据库

我有一个读者数据库,我想借给他们一本书并将其写入数据库。

例子:

读者

753     Leonardo DaVinci    [email protected]   321654987   Lended Books:

grep "Leonardo" database_readers.txt | sed  "s/\(.*\):/\1: Narnie/"

使用此命令,我仅输出在行末尾添加了 book Narnie 的行,但如何更改文件中的行?

感谢您的任何建议

答案1

sed -i -e '/Leonardo/ s/$/ Narnie/' database_readers.txt

这使用 的sed就地编辑选项 ( -i) 来搜索与正则表达式匹配的所有行Leonardo,并将行尾锚点 ( $) 替换为单个空格和单词Narnie。这有效地将 附加Narnie到匹配行的末尾。

请小心正则表达式搜索模式 - 很容易匹配比您预期更多的行。首先测试:

sed -n -e '/Leonardo/ s/$/ Narnie/p' database_readers.txt

-n选项与p末尾的结合使用,s///使得sed仅打印出已更改的行。做不是sed -i除非您想从文件中删除所有未更改的行,否则请使用此选项。

无论如何,如果打印出的行数比您预期的多,则更改为Leonardoor Leonardo DaVinci^753[[:space:]]\+假设行开头的数字是唯一 ID),然后重试,直到它仅更改您预期的行。

对于比这更复杂的事情,您可能需要考虑使用sqlite(甚至mysqlpostgresql)而不是平面文本文件。或者使用具有许多库模块的语言perl来操作平面文件数据库。

相关内容