私は読者のデータベースを持っていて、彼らに本を貸して、そのデータベースに書きたいです。
例:
リーダー
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
フラットファイルデータベースで動作します。