我有一个读者数据库,我想借给他们一本书并将其写入数据库。
例子:
读者
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
除非您想从文件中删除所有未更改的行,否则请使用此选项。
无论如何,如果打印出的行数比您预期的多,则更改为Leonardo
or Leonardo DaVinci
(^753[[:space:]]\+
假设行开头的数字是唯一 ID),然后重试,直到它仅更改您预期的行。
对于比这更复杂的事情,您可能需要考虑使用sqlite
(甚至mysql
或postgresql
)而不是平面文本文件。或者使用具有许多库模块的语言perl
来操作平面文件数据库。