図書館データベース

図書館データベース

私は読者のデータベースを持っていて、彼らに本を貸して、そのデータベースに書きたいです。

例:

リーダー

753     Leonardo DaVinci    [email protected]   321654987   Lended Books:

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

このコマンドを使用すると、行末に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ファイルから変更されていない行をすべて削除したくない場合は、このオプションを使用してください。

とにかく、予想よりも多くの行が印刷された場合(または行の先頭の数字が一意のIDであると仮定)に変更しLeonardo、予想される行だけが変わるまで再試行してください。Leonardo DaVinci^753[[:space:]]\+

それよりも複雑な場合は、プレーンテキストファイルの代わりにsqlite(またはさらにmysql)使用を検討することもできます。postgresqlまたは、多くのライブラリモジュールを含む言語を使用してperlフラットファイルデータベースで動作します。

関連情報